2017-07-17 59 views
0

我有兩隻大熊貓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]]) 

我只想兩列latlon從表df2添加到表df1

我試圖做這樣說:

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命令不應該合併來自df1df2的行,根據cid

我試圖顯示基於虛擬數據的問題。

+0

看到鏈接https://開頭的大熊貓。 pydata.org/pandas-docs/stable/merging.html 也許試試'pd.merge(df1,df2,on ='cid',how ='left',sort = False)' – Wen

回答

2

你做你的加入的方式是原因。在使用右側df中的index時,您使用cid作爲您左側df中的加入密鑰。因此,你的僞連接SQL會是這樣的:on left.cid = right.index

如果你想加入的cid兩個DF的,那麼就使用簡單的on說法:

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