gpt4 book ai didi

python - Pandas 与重复的键合并 - 删除重复的行或阻止它的创建

转载 作者:行者123 更新时间:2023-11-28 20:58:30 29 4
gpt4 key购买 nike

我有两个要合并的数据框,但我的键列包含重复项。数据框看起来像这样:

Name,amount,id
John,500.25,GH10
Helen,1250.00,GH11
Adam,432.54,GH11
Sarah,567.12,GH12

Category,amount,id
Food,500.25,GH10
Travel,1250.00,GH11
Food,432.54,GH11

我正在对它执行与外部连接的合并,以将所有内容包含在合并表中:

merged_table = pd.merge(df1,df2,on="id",how='outer')

我的输出是:

Name,amount_x,id,category,amount_y
John,500.25,GH10,Food,500.25
Helen,1250.00,GH11,Travel,1250.00
Helen,1250.00,GH11,Food,432.54
Adam,432.54,GH11,Travel,1250.00
Adam,432.54,GH11,Food,432.54
Sarah,567.12,GH12

但是,我想要的输出是:

Name,amount_x,id,category,amount_y
John,500.25,GH10,Food,500.25
Helen,1250.00,GH11,Travel,1250.00
Adam,432.54,GH11,Food,432.54
Sarah,567.12,GH12

所以这里发生的是每条具有重复键的记录都与其他表上的每条记录相匹配,因此输出有 4 行而不是 2 行,中间的这两行(第 2 行和第 3 行)是不需要的。

所以我想到的解决方案:

  1. 以某种方式防止创建重复的行。我不能在合并之前使用 drop_duplicates(),因为那样我会排除一些带有双键的行。但是另一列 Amount 在两个表中应该具有相同的 2 个值,但它们可能不同的可能性非常小。

  2. 以与我相同的方式使用合并,但如果 ID 重复,则删除第 2 行和第 3 行并保留第 1 行和第 4 行,因为随着匹配的进行,df1 中的第一行是连接df2中的第一行,然后连接df2中的第二行,然后df1中的第二行连接df2中的第一行,然后连接第二行,第1行和第4行是正确的。

我想在这里使用 .apply() 并编写一些 lambda 函数,但我无法真正理解应该如何正确编写它。

最佳答案

我建议通过 cumcount 创建新的辅助列来计算 id 值然后按此值合并:

df1['g'] = df1.groupby('id').cumcount()
df2['g'] = df2.groupby('id').cumcount()

merged_table = pd.merge(df1,df2,on=["id", 'g'],how='outer')
print (merged_table)
Name amount_x id g Category amount_y
0 John 500.25 GH10 0 Food 500.25
1 Helen 1250.00 GH11 0 Travel 1250.00
2 Adam 432.54 GH11 1 Food 432.54
3 Sarah 567.12 GH12 0 NaN NaN

最后删除 id:

merged_table = pd.merge(df1,df2,on=["id", 'g'],how='outer').drop('g', axis=1)
print (merged_table)
Name amount_x id Category amount_y
0 John 500.25 GH10 Food 500.25
1 Helen 1250.00 GH11 Travel 1250.00
2 Adam 432.54 GH11 Food 432.54
3 Sarah 567.12 GH12 NaN NaN

详细信息:

print (df1)
Name amount id g
0 John 500.25 GH10 0
1 Helen 1250.00 GH11 0
2 Adam 432.54 GH11 1
3 Sarah 567.12 GH12 0

print (df2)
Category amount id g
0 Food 500.25 GH10 0
1 Travel 1250.00 GH11 0
2 Food 432.54 GH11 1

关于python - Pandas 与重复的键合并 - 删除重复的行或阻止它的创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51669232/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com