我有两个要合并的数据帧,但我的键列包含重复项。数据帧如下所示:
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
我正在使用外部联接对其进行合并,以便在合并表中包括所有内容:
^{pr2}$我的输出是:
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行)是不需要的。在
所以我想到的解决方案是:
以某种方式阻止创建重复行。我不能在合并之前使用drop\u duplicates(),因为这样我会用双精度键排除一些行。但是另一列Amount在两个表中应该具有相同的2个值,但是它们之间可能存在差异的可能性非常小。
使用merge的方法与我的方法相同,但是如果ID重复,则删除第2行和第3行,保留第1行和第4行,因为在匹配的过程中,df1中的第一行与df2中的第一行连接,然后df2中的第二行连接,然后df1中的第二行与df2中的第一行连接,然后与第二行连接,即第1行和第4行才是正确的。
我想在这里使用.apply()并编写一些lambda函数,但我真的不知道该如何正确地编写它。在
我建议按^{} 为count
id
值创建新的helper列,然后按以下值合并:最后一次删除
^{pr2}$id
:细节:
在您的输出上(在
merge
之后),您可以在下面应用。我们也能做到,但我建议你想想办法。给你暗示。。。在相关问题 更多 >
编程相关推荐