如何在Pandas中用另一DataFrame的列替换目标列的值
解决方案
可以用Pandas的map()方法或者合并(merge)的方式实现这个替换需求,以下是具体步骤:
明确两个DataFrame的结构:
df1(代码-国家映射表):
| code | countries |
|---|---|
| FR | 法国 |
| US | 美国 |
| IT | 意大利 |
df2(待替换的数据集):
| countries |
|---|
| FR |
| FR |
| IT |
| US |
| US |
| US |
| IT |
方法一:使用map()函数(推荐,简洁高效)
先把df1转换成代码到国家名的字典,再用这个字典对df2的countries列做映射替换:
import pandas as pd # 构造示例数据 df1 = pd.DataFrame({'code': ['FR', 'US', 'IT'], 'countries': ['法国', '美国', '意大利']}) df2 = pd.DataFrame({'countries': ['FR', 'FR', 'IT', 'US', 'US', 'US', 'IT']}) # 生成映射字典 country_map = df1.set_index('code')['countries'].to_dict() # 替换df2的countries列 df2['countries'] = df2['countries'].map(country_map) print(df2)
执行后df2的结果:
| countries |
|---|
| 法国 |
| 法国 |
| 意大利 |
| 美国 |
| 美国 |
| 美国 |
| 意大利 |
方法二:使用merge()合并后替换
如果需要保留原列或处理复杂匹配场景,可用合并方式:
# 合并df2和df1,以df2的countries(即code)匹配df1的code merged_df = df2.merge(df1, left_on='countries', right_on='code', how='left') # 用匹配到的国家名替换原列 df2['countries'] = merged_df['countries_y'] # 若需保留原始code,可新增中文国家列: # df2['country_name'] = merged_df['countries_y'] print(df2)
这种方法适合需要保留原始code,或处理df2中存在df1未收录代码的场景——通过how='left'确保所有df2的行都被保留,匹配不到的会显示NaN。
内容的提问来源于stack exchange,提问作者jacques
相关产品推荐
相关产品推荐

