如何合并两个都有重复的dfs

How to merge two dfs which have duplicates in both

我有两个数据框 df1df2,它们都有重复的行。我想合并这些 dfs。到目前为止我尝试的是从数据框 df2 之一中删除重复项,因为我需要 df1.

中的所有行

问题可能是重复的,但我没有找到任何 solution/hints 这个特定场景的问题。

data = {'Name':['ABC', 'DEF', 'ABC','MNO', 'XYZ','XYZ','PQR','ABC'],
        'Age':[1,2,3,4,2,1,2,4]}
data2 = {'Name':['XYZ', 'NOP', 'ABC','MNO', 'XYZ','XYZ','PQR','ABC'],
        'Sex':['M','F','M','M','M','M','F','M']}
df1 = pd.DataFrame(data)
df2 = pd.DataFrame(data2)

dfn = df1.merge(df2.drop_duplicates('Name'),on='Name')
print(dfn) 

以上片段的结果:

  Name  Age Sex
0  ABC    1   M
1  ABC    3   M
2  ABC    4   M
3  MNO    4   M
4  XYZ    2   M
5  XYZ    1   M
6  PQR    2   F

这对上述数据非常有效,但我有一个大数据,而且这种方法的行为不同,因为我得到的行比 dfn[=13= 中的预期多得多]

我怀疑由于大数据和更多重复项,我得到了这些额外的行,但我无法从 df1.

中删除重复行

抱歉,我无法共享实际数据,因为它太大了! 编辑: 来自实际数据的示例结果: 删除重复项后的 df2 和结果 dfn,我在 df1 中只有一个条目用于 ABC 和 XYZ:

提前致谢!

也尝试从 df1 drop_duplicates:

dfn = pd.merge(df1, df2.drop_duplicates('Name'),
               on='Name', how='left)