2014-10-09 280 views
2

說我要DataFrames,比另一個更長的時間,我想加入一個特定的列,如下面的例子:熊貓:數據幀後過長合併

A = pd.DataFrame({'col1': [1, 2, 3, 4, 5], 'col2': [6, 7, 8, 9, 10], 'col3': [11, 12, 13, 14, 15]}) 

B = pd.DataFrame({'col1': [1, 3, 5], 'col2': [16, 17, 18], 'col4': [19, 20, 21]}) 

然後,我加入他們的行列:

pd.merge(A, B, on='col1', how='outer') 

而獲得,符合市場預期:

 col1  col2_x col3 col2_y col4 
0  1  6  11  16  19 
1  2  7  12  NaN  NaN 
2  3  8  13  17  20 
3  4  9  14  NaN  NaN 
4  5  10  15  18  21 

5 rows × 5 columns 

不過,我有兩個DataFrames,我試圖合併,W分別爲28,011和15,676行。按照上面的方式合併它們,我期望在df2沒有觀察結果的那些單元格中返回一個帶有28011行和NaN的DataFrame。會發生什麼反而是:

len(pd.merge(df1, df2, on='col1', how='outer')) 
    51881 

這怎麼可能?我正在合併的列是一個唯一的標識符,並且在Stata中沒有問題的情況下執行相同的操作。我在這裏錯過了什麼?

+3

聽起來你想怎麼'='left''?外連接還將包括df2中的觀察值,df1中沒有多少。另外,你可以仔細檢查'col1'沒有重複嗎? – chrisb 2014-10-09 17:04:39

回答

2

聽起來像你想要一個左連接。

嘗試:

pd.merge(df1, df2, left_on='col1',right_on='col1',how='left') 
+0

這就是我認爲是好,但是,唉,沒有: 'LEN(pd.merge(DF1,DF2,left_on = 'COL1',right_on = 'COL1',如何= '左'))' 給我51881, 'len(pd.merge(df1,df2,left_on ='col1',right_on ='col1',how ='inner'))' 給出46249.似乎沒有合併的選項較小的數據幀保存到較大的數據幀中,同時保留較大的數據幀的長度。 – 2014-10-10 09:27:55

+0

我的不好,我合併的列確實包含一些重複的值,所以爲了確切識別我需要在兩列合併,最後 'pd.merge(df1,df2,on = ['col1', 'col2'],how ='left')' 訣竅! – 2014-10-10 09:44:01