熊猫:加入' on'失败

时间:2014-04-09 12:59:41

标签: python pandas

我有两个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值。

我做错了什么?

1 个答案:

答案 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列将df1df2合并到但执行left合并,因此保留左侧的所有值,但是合并与ID列匹配的评论,默认为inner,保留左右dfs中的ID

有关mergeexamples的进一步信息。