大熊猫:以特殊顺序合并两个数据框

时间:2019-01-22 08:24:25

标签: python pandas dataframe join merge

我已经检查了所有其他答案,找不到我想要的东西。

我有一个数据帧df1:

0 C D
1 a a
2 a b
3 b c
4 a d

和数据帧df2:

0 C B1   D B2
1 a good a good
2 a good b bad
3 b bad  c fair
4 a good d ---

我希望结果是:

.page {
     margin: -44 0 44 0;
}

说,df1扮演“字典”的角色,我需要为A元素提取B的对应值。 请注意,由于在df1中未定义元素d,因此在df2中相应的值为'---'。

似乎很简单,但无法正常工作。 感谢所有提示。

1 个答案:

答案 0 :(得分:2)

使用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      ---