You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于国家名称将Pandas DataFrame人口数据关联至疫情数据

解决思路:用Pandas Merge替代遍历,搞定名称匹配问题

首先得说,在Pandas里处理这种跨表数据匹配的需求,千万别用遍历——既低效又容易因为名称细节(比如别名、大小写)踩坑。咱们直接用Pandas原生的merge方法,再解决名称不匹配的核心问题就行,一步步来:

1. 先统一国家/地区的名称格式

看你的示例数据就能发现,df1里的Mainland China对应df2里的China,还有像Hong Kong、Macau这类地区在df2里没有对应条目。首先咱们做一个名称映射字典,把df1里的名称转换成和df2匹配的格式:

# 定义名称映射字典,根据你的实际数据补充更多映射关系
country_mapping = {
    'Mainland China': 'China',
    # 比如如果df2里韩国叫"Korea, South",就加'South Korea': 'Korea, South'
}

# 在df1里新增一列统一名称,专门用于匹配
df1['matched_country'] = df1['Country/Region'].replace(country_mapping)

2. 用merge完成数据匹配

接下来用merge把df2的人口数据匹配到df1里。记得用how='left',这样能保留df1的所有行,哪怕df2里没有对应人口数据的条目(比如Hong Kong、Japan这些):

# 先给df2改个清晰的列名,你的示例df2列名是0和1,先规范一下
df2.columns = ['Country', 'Population']

# 执行左连接匹配
df_merged = df1.merge(df2, left_on='matched_country', right_on='Country', how='left')

# 整理成你想要的最终格式,去掉中间临时用的列
df_preferred = df_merged[['ObservationDate', 'Country/Region', 'Confirmed', 'Population']]

3. 处理匹配不到的空值情况

运行完上面的代码后,像Hong Kong、Japan这类df2里没有的条目,Population列会显示NaN。你可以根据需求选择保留空值,或者填充默认内容:

# 示例:把空值填充为"无对应数据"
df_preferred['Population'] = df_preferred['Population'].fillna('无对应数据')

这样处理完之后,就能得到你想要的df_preferred格式了——既保留了df1的所有时间序列数据,又把能匹配到的人口数据精准对应上,效率比遍历高太多,尤其适合你df1有2000+行的场景。

内容的提问来源于stack exchange,提问作者Sumerechny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 22:17:45