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

如何正确对pandas DataFrame执行groupby操作实现薪资按年度及财年汇总

Pandas薪资统计输出解决方案

原代码问题说明

  • 方法1调用pivot_table时未指定index和values参数,导致输出格式不符合要求
  • 方法2存在未定义变量gp,且参数配置错误,无法得到正确结果

1. 自然年(1月-12月)薪资统计实现

输出格式为:行是员工ID,列是各自然年的薪资总和,空值默认填充0

# 按员工ID+自然年分组,计算薪资总和
year_sum = emp_df.groupby(["empid", "year"], as_index=False)["salary"].sum()

# 透视转换为期望的宽表格式
calendar_result = year_sum.pivot(
    index="empid", 
    columns="year", 
    values="salary"
).fillna(0).reset_index()

# 清除列名层级,重命名列更易读
calendar_result.columns.name = None
calendar_result = calendar_result.rename(
    columns={col: f"{col}_total_salary" for col in calendar_result.columns if col != "empid"}
)

print(calendar_result)

运行上述代码后输出结果如下:

empid2019_total_salary2020_total_salary2021_total_salary
101020003500
102300004000

2. 财年(4月-次年3月)薪资统计实现(扩展)

# 月份映射为数字,方便判断财年归属
month_num_map = {
    'Jan':1, 'Feb':2, 'Mar':3, 'Apr':4, 'May':5, 'Jun':6,
    'Jul':7, 'Aug':8, 'Sep':9, 'Oct':10, 'Nov':11, 'Dec':12
}
emp_df['month_num'] = emp_df['month'].map(month_num_map)

# 计算财年:4月及之后归属当前年财年,1-3月归属上一年财年
emp_df['fiscal_year'] = emp_df.apply(
    lambda x: x['year'] if x['month_num'] >=4 else x['year'] - 1, 
    axis=1
)

# 后续逻辑和自然年统计一致
fiscal_sum = emp_df.groupby(["empid", "fiscal_year"], as_index=False)["salary"].sum()
fiscal_result = fiscal_sum.pivot(
    index="empid", 
    columns="fiscal_year", 
    values="salary"
).fillna(0).reset_index()

fiscal_result.columns.name = None
fiscal_result = fiscal_result.rename(
    columns={col: f"FY{col}_total_salary" for col in fiscal_result.columns if col != "empid"}
)

print(fiscal_result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 17:15:03