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

如何基于另一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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:32:03