正确的方法来查找另一个数据框中的缺失值

时间:2018-11-03 18:36:22

标签: python pandas merge

我有一个包含2个字段的数据框,包括名为“ df1”的“名称”和“团队”。我想基于每个人的user_id添加一个名为“ user_id”的附加列,该列可以基于该人的“团队”在单独的数据框中找到。

“ user_id”值可以在其他数据帧中找到,这些数据帧由team字段分隔,名为“ df_a”,“ df_b”,“ df_c” ...等。这些数据帧中的每个都包含相同的三个字段(“名称”,“团队”和“ user_id”),但每个仅包含该团队的名称,并且每个数据框都是完整的(在任何列中均未找到NaN)。

我想知道最Python化的方法是使用团队数据帧中的数据将“ user_id”列添加到df1中(可能有很多团队数据帧,但每个数据帧都相对较小)。到目前为止,我已经尝试遍历每个团队数据框,并使用内部和左侧合并基于“名称”字段将它们合并到df1,但是输出最终会丢失原始数据框中的行,或者输出许多“ user_id_x”,“ user_id_y”列中填充了NaN。

示例数据框:

df1:

               name  team     
0          john doe     a       
2          jane doe     b          
3           amy doe     b         
4        jane smith     c         
5      john johnson     c         

df_a:

               name  team     user_id  
0          john doe     a       15368
1        john smith     a       15382
2       sally smith     a       15212

df_b:

               name  team     user_id  
0          jane doe     b        6325
1           amy doe     b        6164
2         sally doe     b        6294

df_c:

               name  team     user_id 
0         steve doe     c       52956
1        jane smith     c       83635  
2      john johnson     c       54871

这是从每个团队数据框中获取user_id值后的期望输出:

               name  team      user_id   
0          john doe     a        15368
2          jane doe     b         6325
3           amy doe     b         6164  
4        jane smith     c        83635  
5      john johnson     c        54871

让我知道是否有什么需要澄清的,并在此先感谢!

1 个答案:

答案 0 :(得分:2)

尝试一下

main_df=pd.concat([df_a,df_b,df_c],ignore_index=True)
df=pd.merge(df,main_df,how='left',on=['name','team'])

合并所有df_x数据帧,然后执行左连接

输出:

           name team  user_id
0      john doe    a    15368
1      jane doe    b     6325
2       amy doe    b     6164
3    jane smith    c    83635
4  john johnson    c    54871

print (main_df)的输出:

           name team  user_id
0      john doe    a    15368
1    john smith    a    15382
2   sally smith    a    15212
3      jane doe    b     6325
4       amy doe    b     6164
5     sally doe    b     6294
6     steve doe    c    52956
7    jane smith    c    83635
8  john johnson    c    54871