2017-07-31 158 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