2017-07-31 155 views
1

我有兩個數據幀df1df2df1包含列subject_idtimedf2包含列subject_idfinal_time。我想要做的是每subject_iddf1添加一列final_timedf2但只有subject_ids的包含在df1。我試過df1.merge(df2,how='left'),但仍然得到subject_iddf2這個長度更長,並且包含許多重複的'subject_id`。熊貓合併添加列

的例子就是我在尋找:

df1 


    subject_id time 

0   15 12:00 
1   20 12:05 
2   21 12:10 
3   25 12:00 

df2 


    subject_id final_time 

0   15  12:30  
1   15  12:30  
2   15  12:30  
3   20  12:45  
4   20  12:45  
5   21  12:50  
6   25  1:00  
7   25  1:00  
8   25  1:00  

什麼我找

subject_id time final_time 

0   15 12:00  12:30  
1   20 12:05  12:45  
2   21 12:10  12:50  
3   25 12:00  1:00  
+0

可以顯示示例代碼,以及預期的輸出是什麼? – SeeDerekEngineer

回答

2

您應該使用

df1.merge(df2, on='subject_id') 

how默認是內在的,這將只匹配兩列中的條目。 on告訴合併匹配只在你感興趣的專欄

+0

剛剛編輯過我的問題,'df2'包含'subject_id'的重複項,我認爲這導致了與我使用'df1.merge(df2,how ='left')獲得的結果相同的結果' – GNMO11

+0

如果你只想來自'df2'的唯一行連接到'df1'上的匹配行,首先嚐試從'df2'中刪除重複項。所以'df1.merge(df2.drop_duplicates())' – dugup

+0

'.drop_duplicates()'看起來是我在找的東西,謝謝 – GNMO11

0

適合我。沒有結果不在df1

df1 = pd.DataFrame(dict(subject_id=[1, 2, 3], time=[9, 8, 7])) 
df2 = pd.DataFrame(dict(subject_id=[2, 2, 4], final_time=[6, 5, 4])) 

df1.merge(df2, 'left') 

    subject_id time final_time 
0   1  9   NaN 
1   2  8   6.0 
2   2  8   5.0 
3   3  7   NaN