如何解决根据匹配值从其他数据框中复制列
我有两个dataFrame,一个带有iso代码和国家/地区名称 另一个只有国名。
如果值df2
匹配,我想在df1
上添加一个新列,并将国家名称从df1.iso == df2.id
开始。
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: Can only compare identically-labeled Series objects
解决方法
从df2
删除重复的值后,您可以使用DataFrame.merge
来左合并df1
与df1
:
df2 = df2.merge(df1.drop_duplicates(),left_on='id',right_on='iso',how='left').drop('iso',1)
或者,您可以根据Country
代码,使用Series.map
将df1
从df2
映射到iso
:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。