Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫合并并仅保留不匹配的记录_Python_Pandas_Dataframe_Merge - Fatal编程技术网

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

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

如何仅在“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         | 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']