Python 熊猫合并并仅保留不匹配的记录
如何仅在“id”上合并/连接这两个数据帧。生成3个新数据帧:Python 熊猫合并并仅保留不匹配的记录,python,pandas,dataframe,merge,Python,Pandas,Dataframe,Merge,如何仅在“id”上合并/连接这两个数据帧。生成3个新数据帧: 1) R1=合并的记录 2) R2=(DF1-合并记录) 3) R3=(DF2-合并记录) 在Python中使用pandas 第一数据帧(DF1) 第二数据帧(DF2) 我的解决方案 R1 =pd.merge(DF1, DF2, on='id', how='inner') 我不确定这是获得R2和R3的最简单方法 R2应该看起来像 | id | name | |-----------|-------| | 5
- 1) R1=合并的记录
- 2) R2=(DF1-合并记录)
- 3) R3=(DF2-合并记录)
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 |
您可以在
合并
中打开指示器
,并查找相应的值:
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']
更新:本的建议如下:
dfs = {k:v for k,v in total_merge.groupby('_merge')}
然后你可以做,例如:
dfs['both']
也许我们可以只做groupby~并输出到dict~@YOBEN_是的,这确实是一个非常干净的方法。这只是为了符合OP的期望,这比你的建议要差一些。我已经接受了答案。但我很想知道YOBEN_的解决方案是什么样子的like@misguided请参阅更新的答案。
dfs = {k:v for k,v in total_merge.groupby('_merge')}
dfs['both']