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

Python pandas计算两年度职业行业DataFrame差值生成目标表

按OCC+IND匹配计算两年行业职业数据差值的实现方案

原按行位置相减的逻辑仅适用于两个表行数、行顺序完全对齐的场景,无法适配编码不匹配、行数不一致的情况,正确实现步骤如下:

  1. 统一两个年份DataFrame的列名,剥离年份后缀方便关联匹配
import pandas as pd

# 示例数据初始化(和提供的测试数据一致)
d = {'OCC2005': [1234, 1234, 1234 ,1234, 2357,2357,2357,2357, 4321,4321,4321,4321, 3333], 'IND2005': [4, 5, 6, 7, 5,6,7,4, 6,7,5,4,5], 'Result': [7, 8, 12, 1, 11,15,20,1,5,12,8,4,3]}
df = pd.DataFrame(data=d)
d2 = {'OCC2006': [1234, 1234, 1234 ,1234, 2357,2357,2357,2357, 4321,4321,4361,4321, 3333,4444], 'IND2006': [4, 5, 6, 7, 5,6,7,4, 6,7,5,4,5,8], 'Result': [17, 18, 12, 1, 1,5,20,1,5,2,18,4,0,15]}
df2 = pd.DataFrame(data=d2)

# 重命名列,统一关联键和数值列标识
df_2005 = df.rename(columns={'OCC2005':'OCC', 'IND2005':'IND', 'Result':'result_2005'})
df_2006 = df2.rename(columns={'OCC2006':'OCC', 'IND2006':'IND', 'Result':'result_2006'})
  1. 按OCC、IND两个字段组合匹配合并数据,可根据业务需求选择连接方式:
  • how='inner':仅保留两年同时存在的OCC+IND组合
  • how='outer':保留两年所有出现过的OCC+IND组合,单年无数据的位置会填充空值
  • how='left'/how='right':分别保留左表(2005年)/右表(2006年)的全部组合
merged = pd.merge(
    df_2005,
    df_2006,
    on=['OCC', 'IND'],
    how='outer'
)
  1. 处理缺失值并计算最终差值
    如果选择outer连接,单年不存在的记录数值可按业务规则填充,比如无数据的年份结果记为0:
# 缺失值填充,不需要保留单年记录可跳过这步,改用inner连接即可
merged[['result_2005', 'result_2006']] = merged[['result_2005', 'result_2006']].fillna(0)
# 计算差值:2006年结果减2005年结果,正值为增长,负值为下降
merged['final_result'] = merged['result_2006'] - merged['result_2005']
  1. 提取目标字段得到最终结果表
final_df = merged[['OCC', 'IND', 'final_result']].reset_index(drop=True)
print(final_df)

用示例数据运行后,会自动正确匹配所有组合:比如仅在2006年存在的OCC=4361/IND=5、OCC=4444/IND=8都会被正确识别,不会出现行错位计算的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:31:15