我有两个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
值。
我做错了什么?
答案 0 :(得分:3)
您可以进行合并以达到您想要的效果:
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
的问题是,默认情况下它执行左索引连接,因为您的数据框没有匹配的公共索引值,那么您的注释列最终为空
修改强>
从评论开始,如果您想要保留df1
中的所有值,只添加非空的评论并且df1
中存在ID,那么您可以执行left
合并:
df1.merge(df2.dropna( subset=['Comment']), on='ID', how='left')
这将删除任何带有空注释的行,使用ID列将df1
和df2
合并到但执行left
合并,因此保留左侧的所有值,但是合并与ID
列匹配的评论,默认为inner
,保留左右dfs中的ID
。