我有两个 DataFrame,df1:
ID value 1
0 5 162
1 7 185
2 11 156
和 df2:
ID Comment
1 5
2 7 Yes!
6 11
...我想使用 ID
加入,结果如下所示:
ID value 1 Comment
5 162
7 185 Yes!
11 156
真正的 DataFrame 更大并且包含更多列,我本质上想将 Comment
列从 df2
添加到 df1
。我尝试使用
df1 = df1.join(df2['Comment'], on='ID')
...但这只会让我在 df1 中获得一个新的空 Comment
列,就像 .join 不知何故无法使用 ID
列作为索引。我也尝试过
df1 = df1.join(df2['Comment'])
...但是它使用默认索引,两个 DataFrame 之间不匹配(它们也有不同的长度),从而在错误的位置给了我一个 Comment
值。
我做错了什么?
最佳答案
您只需进行合并即可实现您想要的:
In [30]:
df1.merge(df2, on='ID')
Out[30]:
ID value1 Comment
0 5 162 None
1 7 185 Yes!
2 11 156 None
[3 rows x 3 columns]
join
的问题是默认情况下它执行左索引连接,因为您的数据帧没有匹配的公共(public)索引值,那么您的评论列最终为空
编辑
根据注释,如果您想保留 df1
中的所有值并仅添加非空且具有 df1
中存在的 ID 的注释,那么您可以可以执行左
合并:
df1.merge(df2.dropna( subset=['Comment']), on='ID', how='left')
这将删除任何带有空注释的行,使用 ID 列将 df1
和 df2
合并,但执行 left
合并,以便保留左侧的所有值,但会合并与 ID
列匹配的注释,默认为 inner
,保留左侧的 ID
和右 dfs。
关于python - Pandas :加入 'on' 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22963345/