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

Python中如何将多年份DataFrame与主表外连接并新增列?

解决方案:多年度DataFrame外连接并扩展为新列

没问题!你要实现的是把多个年度的移民统计数据(总数、女性、男性)作为独立新列合并到主表,用Pandas完全可以轻松搞定,下面给你两种实用的方法:

方法一:先合并年度表再透视(推荐,更高效)

这种方法适合批量处理多个年度表,步骤清晰:

  1. 给每个年度表添加年份标识
    先给每个独立的年度DataFrame加一个year列,用来区分不同年份的数据:

    # 假设你的年度表分别是df_2000、df_2001...df_2008
    df_2000['year'] = 2000
    df_2001['year'] = 2001
    df_2002['year'] = 2002
    # ... 依次给df_2003到df_2008添加对应年份的year列
    
  2. 合并所有年度表为一个大表
    用pd.concat把9个年度表纵向合并:

    # 把所有年度表放到一个列表里
    annual_dfs_list = [df_2000, df_2001, df_2002, df_2003, df_2004, df_2005, df_2006, df_2007, df_2008]
    combined_annual_data = pd.concat(annual_dfs_list, ignore_index=True)
    
  3. 透视年度表为宽表(将年份转为列)
    这一步是核心:把每个年份的移民指标转成单独的列。假设你和主表的连接主键是country(替换成你实际的主键,比如地区代码、城市名等),指标列是total_migrants、female、male:

    # 透视操作
    pivoted_annual = combined_annual_data.pivot(
        index='country',  # 替换为你的连接主键列名
        columns='year',
        values=['total_migrants', 'female', 'male']
    )
    # 给列重命名,让列名更直观(比如total_migrants_2000)
    pivoted_annual.columns = [f"{metric}_{year}" for metric, year in pivoted_annual.columns]
    # 重置索引,让主键列回到普通列
    pivoted_annual = pivoted_annual.reset_index()
    
  4. 和主表做外连接
    用pd.merge执行外连接,确保主表和年度表的所有数据都被保留:

    # 假设你的主表是main_df
    final_merged_df = pd.merge(
        main_df,
        pivoted_annual,
        on='country',  # 替换为实际主键列名
        how='outer'
    )
    

方法二:循环逐个合并(适合需要逐表调整的场景)

如果你需要对每个年度表单独做一些预处理,也可以用循环逐个合并到主表:

# 先复制主表作为最终结果的初始版本
final_merged_df = main_df.copy()

# 循环2000到2008年
for year in range(2000, 2009):
    # 获取对应年份的DataFrame(假设你的年度表命名是df_{年份})
    current_year_df = locals()[f'df_{year}']
    # 重命名指标列,加上年份后缀
    renamed_year_df = current_year_df.rename(columns={
        'total_migrants': f'total_migrants_{year}',
        'female': f'female_{year}',
        'male': f'male_{year}'
    })
    # 外连接到主表
    final_merged_df = pd.merge(
        final_merged_df,
        renamed_year_df,
        on='country',  # 替换为实际主键列名
        how='outer'
    )

关键注意事项

  • 确保主键一致:主表和所有年度表的连接主键(比如country)必须列名相同、数据类型一致(比如都是字符串类型的国家代码),否则会出现匹配失败或重复数据。
  • 处理缺失值:外连接后,没有对应数据的位置会填充NaN,你可以用final_merged_df.fillna(0)(如果缺失代表0)或其他逻辑处理。
  • 清理冗余列:合并前可以用df.drop(columns=['多余列名'])删掉年度表中不需要的列,减少最终表的冗余。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:58:11