合并数据框,但只保留一个数据框的列。

3

我有一个名为 df1DataFrame

| ID | A |
---------
| 1  | 4 |
| 1  | 4 |
| 2  | 1 |
| 2  | 3 |
| 3  | 2 |

还有一个DataFrame df2

| ID | B |
---------
| 1  | 2 |
| 2  | 2 |
| 3  | 9 |

我想(left)合并它们,但只想保留df2的列。 有什么简单易行的解决方案吗?
结果生成的DataFrame应该长这样:
|ID | B |
---------
| 1 | 2 |
| 1 | 2 |
| 2 | 2 |
| 2 | 2 |
| 3 | 9 |
2个回答

4
您可以将 df1 中的 ID 列切片为一个 DataFrame,然后在 ID 上合并:
import pandas as pd

df1 = pd.DataFrame({'ID': [1, 1, 2, 2, 3],
                    'A': [4, 4, 1, 2, 3]
                    })

df2 = pd.DataFrame({'ID': [1, 2, 3],
                    'B': [2, 2, 9]
                    })


merged = df1[['ID']].merge(df2, how='left')

这将返回一个形如DataFrame的数据结构:
   ID  B
0   1  2
1   1  2
2   2  2
3   2  2
4   3  9

如果数据框中有不需要的列与你要删除的列同名,那么这将非常有用。 - Josiah Yoder
简单而有效的解决方案。 - Ziur Olpa

3

执行连接操作并仅选择df2中的列。

df2.merge(df1, on='ID')[df2.columns]
# output:
   B  ID
0  2   1
1  2   1
2  2   2
3  2   2
4  9   3

另一个答案比这个更干净,因为它在合并之前清除了不需要的列。如果一个不需要的列与主数据框中的非“on”列匹配,那么两个列都将被重命名,使得按列名称进行选择变得困难。 - Josiah Yoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接