首页 > 解决方案 > 如何合并两个都有重复的dfs

问题描述

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

问题可能是重复的,但我没有找到针对此特定场景的任何解决方案/提示。

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中获得的行数比预期的多得多

我怀疑由于大数据和更多重复我得到了那些额外的行,但我不能从df1中删除重复的行。

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

在此处输入图像描述在此处输入图像描述

提前致谢!

标签: pythonpython-3.xpandasdataframemerge

解决方案


也尝试drop_duplicates从 df1 :

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

推荐阅读