合并结果是错误的

时间:2017-07-17 15:14:19

标签: python pandas merge

我有两个pandas DataFrames:

df1:

    cid day         total_count
0   2   2017-06-01  1
1   2   2017-03-04  1
2   1   2017-04-07  1
3   4   2017-06-25  1
4   5   2017-03-18  2
4   3   2017-03-18  2
4   1   2017-03-18  2
4   5   2017-03-18  2

df2 = pd.DataFrame(columns=["cid","pid","lat","lon"], data=[[1,1,41.485731,3.2409],     [2,2,41.49206,3.22573],[3,3,41.494026,3.22354],[4,4,41.495904,3.14504],[5,5,41.50271,3.12575]])

我只想在表lat的表lon中添加两列df1df2

我试着这样做:

result = pd.merge(df1, df2, left_on='cid', right_index=True, how='left', sort=False)

但是我得到了错误的结果(result.head()):

    cid_x   day         total_count cid_y   pid     lat         lon
0   2       2017-06-01  1           1.0     1.0     41.475215   3.23462
1   2       2017-03-04  1           1.0     1.0     41.501326   3.41505
2   1       2017-04-07  1           2.0     2.0     41.484948   3.34780
3   4       2017-06-25  1           5.0     5.0     41.492983   3.43865
4   5       2017-03-18  1           3.0     3.0     41.502776   3.35977

首先,我不明白为什么我会得到两列cid_xcid_y而不是cid?其次,我误解了为什么每一行cid_xcid_y的值都不同? merge命令不应该根据df1合并来自df2cid的行吗?

我试图根据虚拟数据显示问题。

1 个答案:

答案 0 :(得分:2)

你加入的方式就是原因。当您使用右侧df中的cid时,您使用index作为左侧df的连接键。因此,您的伪连接SQL将类似于:on left.cid = right.index

如果你想加入两个df的cid,那么只需使用简单的on参数:

result = pd.merge(df1, df2, on='cid', how='left')