我有两个数据框,我试图加入pandas(版本0.18.1)。
test1 = pd.DataFrame({'id': range(1,6), 'place': ['Kent','Lenawee','Washtenaw','Berrien','Ottawa']})
id_1 place
0 1 Kent
1 2 Lenawee
2 3 Montreal
3 4 Berrien
4 5 Ottawa
test2 = pd.DataFrame({'id_2': range(6,11), 'id_parent': range(1,6)})
id_2 id_parent
0 6 1
1 7 2
2 8 3
3 9 4
4 10 5
然而,当我加入这两个表时,最后一行没有正确加入,因为它是一个左连接,导致NaN。
df = test2.join(test1,on='id_parent',how='left')
id_2 id_parent id_1 place
0 6 1 2 Lenawee
1 7 2 3 Montreal
2 8 3 4 Berrien
3 9 4 5 Ottawa
4 10 5 NaN NaN
这对我没有意义 - id_parent和id_1是连接两个表的键,它们都具有相同的值。两列都具有相同的dtype(int64)。这里发生了什么?
答案 0 :(得分:3)
In [18]:
test2.merge(test1,left_on='id_parent', right_on='id')
Out[18]:
id_2 id_parent id place
0 6 1 1 Kent
1 7 2 2 Lenawee
2 8 3 3 Washtenaw
3 9 4 4 Berrien
4 10 5 5 Ottawa
你得到NaN
,因为rhs将使用rhs索引而0
和5
没有条目,所以你得到NaN
答案 1 :(得分:1)
这里我引用pandas的文档:' join接受一个可选的on参数,该参数可以是一列或多个列名,它指定传递的DataFrame将在DataFrame中的该列上对齐。 "
因此,在您的情况下,您将匹配test1上id_parent的test2索引。