[英]pandas: merge two data frames in a special order
我已经检查了所有其他答案,我找不到我要找的东西。
我有一个数据框 df1:
0 A B
1 a good
2 b bad
3 c fair
和数据框df2:
0 C D
1 a a
2 a b
3 b c
4 a d
我希望结果是:
0 C B1 D B2
1 a good a good
2 a good b bad
3 b bad c fair
4 a good d ---
比如说,df1 扮演了一个“字典”的角色,我需要为 A 元素提取 B 的相应值。 请注意,由于元素 d 未在 df1 中定义,因此对应的值在 df2 中为“---”。
看起来很简单,但不能让它工作。 感谢所有的提示。
使用s.map()
d=dict(zip(df1.A,df1.B))
df2['B1']=df2.C.map(d).fillna('---')
df2['B2']=df2.D.map(d).fillna('---')
df2=df2[['C','B1','D','B2']]
print(df2)
C B1 D B2
0 a good a good
1 a good b bad
2 b bad c fair
3 a good d ---
如果 df2 中有更多列,则用于创建动态映射:
my_list=[]
for i in df2.columns:
my_list.append(df2[i].map(d).fillna('---'))
df_new=df2.join(pd.concat(my_list,axis=1),lsuffix='',rsuffix='_mapped')
print(df_new)
C D C_mapped D_mapped
0 a a good good
1 a b good bad
2 b c bad fair
3 a d good ---
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.