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

如何基于年份偏移量在Pandas中合并多个DataFrame?

基于年份偏移量合并Pandas DataFrame的实现方案

核心需求是根据资金→员工→产出的年度滞后关系,将三个单类DataFrame合并为一个新表:每行包含N年的产出数据、N-2年的对应资金数据、N-1年的对应员工数据。

实现步骤与代码

首先补全最小可复现代码中的员工数据示例,然后分步骤完成合并:

import pandas as pd

# 1. 定义原始数据框
# 产出数据
d = {'Name': ['ABC', 'DEF'],
     'ID': [1, 2],
     'Year': [2023, 2022],
     'Output': [25, 51]}
output_df = pd.DataFrame(data=d)

# 资金数据
e = {'Name': ['ABC', 'DEF', 'ABC'],
     'ID': [1, 2, 1],
     'Year': [2021, 2020, 2023],
     'Funding': [500, 1000, 17]}
funding_df = pd.DataFrame(data=e)

# 员工数据(补充示例)
s = {'Name': ['ABC', 'DEF'],
     'ID': [1, 2],
     'Year': [2022, 2021],
     'Staff': [18, 12]}
staff_df = pd.DataFrame(data=s)

# 2. 为产出数据框生成资金/员工的目标匹配年份
output_df['Funding_Year'] = output_df['Year'] - 2  # 产出年份N对应资金年份N-2
output_df['Staff_Year'] = output_df['Year'] - 1    # 产出年份N对应员工年份N-1

# 3. 合并资金数据:通过ID+目标资金年份匹配
combined_df = pd.merge(
    output_df,
    funding_df[['ID', 'Year', 'Funding']],  # 仅保留需要匹配的列
    left_on=['ID', 'Funding_Year'],         # 左表用ID+资金目标年份
    right_on=['ID', 'Year'],                # 右表用ID+原始资金年份
    how='left'                              # 保留所有产出数据,缺失匹配则显示NaN
).drop(columns=['Year_y'])  # 删除合并后重复的年份列

# 4. 合并员工数据:同理通过ID+目标员工年份匹配
combined_df = pd.merge(
    combined_df,
    staff_df[['ID', 'Year', 'Staff']],
    left_on=['ID', 'Staff_Year'],
    right_on=['ID', 'Year'],
    how='left'
).drop(columns=['Year_y'])

# 5. 调整列名至目标格式
combined_df = combined_df.rename(columns={
    'Name': '名称',
    'ID': '编号',
    'Year_x': '产出年份',
    'Output': '产出',
    'Funding_Year': '资金年份',
    'Funding': '资金',
    'Staff_Year': '员工年份',
    'Staff': '员工'
})

# 查看最终结果
print(combined_df)

关键细节说明

  • 匹配逻辑:使用pd.merge()的left_on和right_on参数,实现跨表的年份偏移匹配,而非直接按相同列名合并
  • 数据保留策略:how='left'确保所有产出数据都被保留,若某条产出数据没有对应的资金/员工数据,对应字段会显示NaN;若只需要完整匹配的数据,可改为how='inner'
  • 去重处理:如果资金/员工DataFrame中存在同一ID+Year的重复数据,需先执行funding_df = funding_df.drop_duplicates(subset=['ID', 'Year'])避免合并后产生重复行

最终输出结果

名称编号产出年份产出资金年份资金员工年份员工
ABC12023252021500.0202218.0
DEF220225120201000.0202112.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 19:34:58