如何基于国家名称将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
相关产品推荐
相关产品推荐

