Pandas:连接时'on'失败
我有两个数据表,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
实际上,这两个数据表都要大得多,还包含更多的列。我主要是想把 df2
中的 Comment
列加到 df1
中。我试过用
df1 = df1.join(df2['Comment'], on='ID')
... 但是这样只在 df1 中得到了一个新的空的 Comment
列,感觉 .join 没有把 ID
列当作索引来用。我也试过
df1 = df1.join(df2['Comment'])
... 但是那样用的是默认的索引,而这两个数据表的索引不匹配(它们的长度也不同),导致 Comment
的值放错了地方。
我到底哪里做错了呢?
1 个回答
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
合并,这样只保留在左右两个数据框中都有的ID
。