我有一个包含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
让我知道是否有什么需要澄清的,并在此先感谢!
答案 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