首页 > 解决方案 > 避免重复数据框与其副本之间的 Pandas 合并

问题描述

我需要在同一数据框的列中找到匹配项,我正在做的是复制数据框并在数据框与其副本之间进行合并,但是当两列相等且相同时,有一种方法可以避免重复结果如前所示。例如:

df1 = pd.DataFrame()
df1['Id'] = ['001','002','003','004','005','006']
df1['Tel'] = ['123','456','789','123','852','123']

df2 = df1

df3 = pd.merge(df1,df2,on='Tel',how='inner')

结果如下:

    Id_x Tel Id_y
0   001 123 001
1   001 123 004
2   001 123 006
3   004 123 001
4   004 123 004
5   004 123 006
6   006 123 001
7   006 123 004
8   006 123 006
9   002 456 002
10  003 789 003
11  005 852 005

但我想要以下结果:

    Id_x Tel Id_y
0   001 123 004
1   001 123 006
2   004 123 006

如您所见,当 Id_x == Id_y 时我需要忽略结果,但当相同的结果以不同的顺序显示时,我也需要忽略,例如在第一个结果中,索引 1 与索引 3 的结果相同,索引 2 与索引 6 的结果相同,索引 5 与索引 7 的结果相同。所以在最终结果中,我只想要索引 1、索引 2 和索引 5。

有没有办法做到这一点?

太感谢了!

标签: pythonpandasdataframemerge

解决方案


一种迂回的解决方案,但这应该会给你你正在寻找的答案

df1 = pd.DataFrame()
df1['Id'] = ['001','002','003','004','005','006']
df1['Tel'] = ['123','456','789','123','852','123']

df1 = df1.drop_duplicates()
df2 = df1
df3 = pd.merge(df1,df2,on='Tel',how='inner')
df3 = df3[df3['Id_x'] != df3['Id_y']]

推荐阅读