如何基于国家名称和年份高效合并两个Pandas DataFrame?
解决DataFrame基于国家与年份的合并问题
问题场景
需要合并两个DataFrame:
df_GDP:包含国家名称、国家代码、年份、GDP值(rgdpe列)df_biofuel_prod:包含国家名称、生物燃料产量(value列)、年份
要求基于国家名称+年份匹配,最终结果保留列:Country、Country code、year、rgdpe、value
当前代码的错误点
你写的代码存在三个核心问题:
- 仅提取了
df_GDP的rgdpe列,直接丢失了国家、国家代码、年份等关键信息 - 关联键完全错误:
left_on='Value'(df_biofuel_prod无此列,正确列名是countries),right_on='country'(df_GDP列名是Country,且你只传了rgdpe列,根本没有该字段) - 合并方向逻辑混乱,导致结果仅保留
rgdpe列,其余为空
正确合并代码
import pandas as pd # 基于国家名称+年份的组合键进行合并 combined = pd.merge( left=df_GDP, right=df_biofuel_prod, left_on=['Country', 'year'], # df_GDP的匹配键 right_on=['countries', 'year'], # df_biofuel_prod的匹配键 how='inner' # 仅保留两边都匹配上的数据;若要保留GDP表全部数据,改为how='left' ) # 整理为预期的列结构,移除重复的countries列 combined = combined[['Country', 'Country code', 'year', 'rgdpe', 'value']] # 导出到CSV(添加index=False避免导出多余的索引列) combined.to_csv('../../combined_test.csv', index=False)
代码说明
- 使用组合键(国家+年份)匹配,确保同一国家同一年的GDP和产量数据准确对应
- 保留
df_GDP的所有必要列,不会丢失国家代码等信息 - 通过
how参数控制合并逻辑:inner:只保留两边都有匹配数据的行(适合需要完整匹配的场景)left:保留df_GDP的所有行,无匹配产量的行填充NaN(适合需要完整GDP数据的场景)
内容的提问来源于stack exchange,提问作者Aroune
相关产品推荐
相关产品推荐

