2017-04-03 47 views
1

我有一個相對簡單的任務,一個問題...合併收益奇數長度

我有兩個dataframes: df_sample這是我從CSV

+------+-----------+-------+-----------+ 
| key | Full Text | Date | Publisher | 
+------+-----------+-------+-----------+ 
| abcd | foofoo | date1 | a   | 
| bcde | barbar | date2 | b   | 
| cdef | foobar | date3 | c   | 
+------+-----------+-------+-----------+ 

len(df_sample) = 20000 

df_labels我從Excel

讀讀
+------+----------+--------+--------+ 
| key | relevant | other | other2 | 
+------+----------+--------+--------+ 
| abcd | yes  | blabla | blabla | 
| bcde | no  | blabla | blabla | 
| cdef | no  | blabla | blabla | 
| defg | yes  | blabla | blabla | 
+------+----------+--------+--------+ 

len(df_labels) = 219000 

我想加入這兩個表的密鑰分配relevant值從第一個密鑰數據幀。所需的輸出會是這樣的:

+------+-----------+-------+-----------+----------+ 
| key | Full Text | Date | Publisher | relevant | 
+------+-----------+-------+-----------+----------+ 
| abcd | foofoo | date1 | a   | yes  | 
| bcde | barbar | date2 | b   | no  | 
| cdef | foobar | date3 | c   | no  | 
+------+-----------+-------+-----------+----------+ 

我似乎做到這一點,但爲什麼要在下面給我27377分的結果,而不是20000(在原左表):

df = pd.merge(left=df_sample, right=df_labels, on="key") 
+1

你是否檢查過,鍵列值在第二個df中是唯一的,如果它們重複,那麼你得到重複的行,另外你是否有'NaN'關鍵列? – EdChum

+0

當然,在第二個df有一些重複...非常感謝我指出了正確的方向! – pawelty

回答

2

你看到額外的行,因爲在這兩個dfs鍵不是唯一的,在你的情況下,第二個df。你需要決定是否要重複行這是當前的行爲,或者你要刪除的重複第二DF:

df_labels = df_labels.drop_duplicates(subset='key') 

默認將只保留第一個重複的,如果你想替代行爲如保持最後,那麼你可以通過:keep='last'看到docs

+0

非常感謝,再次! – pawelty