mis*_*ded 5 python merge dataframe pandas
如何仅在“id”上合并/连接这两个数据框。生成 3 个新数据框:
在 Python 中使用pandas。
第一个数据帧 (DF1)
| id | name |
|-----------|-------|
| 1 | Mark |
| 2 | Dart |
| 3 | Julia |
| 4 | Oolia |
| 5 | Talia |
Run Code Online (Sandbox Code Playgroud)
第二个数据帧 (DF2)
| id | salary |
|-----------|--------|
| 1 | 20 |
| 2 | 30 |
| 3 | 40 |
| 4 | 50 |
| 6 | 33 |
| 7 | 23 |
| 8 | 24 |
| 9 | 28 |
Run Code Online (Sandbox Code Playgroud)
我的解决方案
R1 =pd.merge(DF1, DF2, on='id', how='inner')
Run Code Online (Sandbox Code Playgroud)
我不确定这是获得 R2 和 R3 的最简单方法
R2 应该看起来像
| id | name |
|-----------|-------|
| 5 | Talia |
Run Code Online (Sandbox Code Playgroud)
R3 应该是这样的:
| id | salary |
|-----------|--------|
| 6 | 33 |
| 7 | 23 |
| 8 | 24 |
| 9 | 28 |
Run Code Online (Sandbox Code Playgroud)
Qua*_*ang 12
您可以打开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']
Run Code Online (Sandbox Code Playgroud)
更新:本的建议是这样的:
dfs = {k:v for k,v in total_merge.groupby('_merge')}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做,例如:
dfs['both']
Run Code Online (Sandbox Code Playgroud)