如何基于另一DataFrame的两列在Pandas中新增匹配列?
解决方法
你的问题核心是按「辖区+年份」两个维度匹配人口数据,之前用apply循环查找不仅效率低,还会因为无匹配数据导致索引越界错误。更简便的正确做法是直接基于双键合并:
步骤1:提取df_monthly的年份并转为int类型
先从Start_Date中提取年份,转为和df_pop['data_year']一致的int类型:
df_monthly['data_year'] = df_monthly['Start_Date'].dt.year.astype(int)
步骤2:基于双键合并DataFrame
直接用pd.merge同时匹配「辖区」和「年份」两个条件,一步完成数据关联:
merged_df = pd.merge( df_monthly, df_pop, left_on=['Jurisdiction', 'data_year'], right_on=['ori', 'data_year'], how='left' # 用left保留df_monthly所有行,无匹配时year_pop为NaN )
步骤3:整理结果列
把匹配到的人口数据重命名为目标列,并清理冗余字段:
# 重命名列 merged_df.rename(columns={'population': 'year_pop'}, inplace=True) # 移除不需要的列 merged_df.drop(['data_year', 'ori'], axis=1, inplace=True) # 赋值回原DataFrame df_monthly = merged_df
原代码报错原因
- 原代码先只按辖区做全量合并,导致
merged_df中存在大量年份不匹配的无效行 - 后续用
apply循环查找时,一旦某行没有对应辖区+年份的人口数据,values[0]就会因空数组抛出「索引0越界」错误 - 这种循环查找的方式效率极低,远不如Pandas原生的合并操作高效
内容的提问来源于stack exchange,提问作者TheMaffGuy
相关产品推荐
相关产品推荐

