我有两个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
中添加两列df1
和df2
。
我试着这样做:
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_x
和cid_y
而不是cid
?其次,我误解了为什么每一行cid_x
和cid_y
的值都不同? merge
命令不应该根据df1
合并来自df2
和cid
的行吗?
我试图根据虚拟数据显示问题。
答案 0 :(得分:2)
你加入的方式就是原因。当您使用右侧df中的cid
时,您使用index
作为左侧df的连接键。因此,您的伪连接SQL将类似于:on left.cid = right.index
如果你想加入两个df的cid
,那么只需使用简单的on
参数:
result = pd.merge(df1, df2, on='cid', how='left')