熊猫合并并仅保留不匹配的记录

时间:2020-07-31 01:09:38

标签: python pandas dataframe merge

如何仅在“ id”上合并/合并这两个数据框。产生3个新的数据框:

  • 1)R1 =合并记录
  • 2)R2 =(DF1-合并记录)
  • 3)R3 =(DF2-合并记录)

在Python中使用熊猫

第一个数据帧(DF1)

|        id | name  |
|-----------|-------|
| 1         | Mark  |
| 2         | Dart  |
| 3         | Julia |
| 4         | Oolia |
| 5         | Talia |

第二个数据帧(DF2)

|        id | salary |
|-----------|--------|
| 1         | 20     |
| 2         | 30     |
| 3         | 40     |
| 4         | 50     |
| 6         | 33     |
| 7         | 23     |
| 8         | 24     |
| 9         | 28     |

我的解决方案

R1 =pd.merge(DF1, DF2, on='id', how='inner')

我不确定这是获得R2和R3的最简单方法

R2应该看起来像

|        id | name  |
|-----------|-------|
| 5         | Talia |

R3应该看起来像:

|        id | salary |
|-----------|--------|
| 6         | 33     |
| 7         | 23     |
| 8         | 24     |
| 9         | 28     |

1 个答案:

答案 0 :(得分:2)

您可以在indicator中打开merge并查找相应的值:

total_merge = df1.merge(df2, on='id', how='outer', indicator=True)

R1 = total_merge[total_merge['_merge']=='both']
R2 = total_merge[total_merge['_merge']=='left_only']
R3 = total_merge[total_merge['_merge']=='right_only']

更新:Ben的建议可能是这样的:

dfs = {k:v for k,v in total_merge.groupby('_merge')}

然后您可以执行以下操作:

dfs['both']