我有两个不同的数据帧,其中包含关于;名称";以及";id";Df1大于df2。我想";加入";在ID上,这样来自df2的品牌名称在df1中将被认为是正确的。然而,我也想找到df1中被替换的所有名称,并将它们替换为df2中的相关名称。样品:df1
index id name
0 123 Del Monte
154047 124 Pokmon
171696 125 Pokmon
69264 126 Pokmon
df2
index name id
79376 Pokémon 124
135487 Pokémon 125
结果:
df1
index id name
0 123 Del Monte
154047 124 Pokémon
171696 125 Pokémon
69264 126 Pokémon
使用Series.map
和Series.fillna
以及通过与DataFrame.dropna
和DataFrame.drop_duplicates
:的左联接创建的辅助Series
s = (df1.merge(df2, on='id', how='left')
.dropna(subset=['name_y'])
.drop_duplicates(['name_x','name_y'])
.set_index('name_x')['name_y'])
df1['name'] = df1['name'].map(s).fillna(df1['name'])
print (df1)
index id name
0 0 123 Del Monte
1 154047 124 Pokémon
2 171696 125 Pokémon
3 69264 126 Pokémon