基于匹配的值,从另一个数据框中复制列。

3

我有两个数据框,一个带有标准国家代码和国家名称,另一个只有国家名称。

我想在df2中添加一个新列,如果值df1.iso == df2.id匹配,则该列应包含来自df1的国家名称。

df1

Country      iso    
Afghanistan  AFG       
Afghanistan  AFG       
Afghanistan  AFG       
...

以及df2

id      
AFG     
AFG     
AFG     
AFG
... 

我尝试了这个:

post['country'] = pre['Country'].where(pre['iso'] == post['id'])

但是我遇到了一个错误

ValueError:只能比较标签相同的Series对象


你想将这些值映射到df1还是df2? - Henry Yik
我想让df2有一个名为“Country”的列,如果df2的“id”列与df1的“iso”列匹配,则将df1中该记录中的“Country”列值复制到df2中相应的行中。因此,df2中所有的“AFG”都应该在新添加的“Country”列中具有“Afghanistan”的值...对于所有包含世界上所有国家ISO代码的行也是如此。 - Tytire Recubans
1个回答

3
您可以使用 DataFrame.merge 函数,在从 df1 中删除重复值之后,将 df2 左连接到 df1 中:
df2 = df2.merge(df1.drop_duplicates(), left_on='id',
                right_on='iso', how='left').drop('iso', 1)

或者,您可以使用Series.mapdf1中的Country基于iso代码映射到df2

df2['Country'] = df2['id'].map(df1.drop_duplicates().set_index('iso')['Country'])

结果:

print(df2)
    id      Country
0  AFG  Afghanistan
1  AFG  Afghanistan
2  AFG  Afghanistan
3  AFG  Afghanistan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接