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

如何使用pandas将分散的员工福利列转为以福利名为表头的宽表

Pandas员工福利表结构转换实现方案

实现思路

通过宽表转长表再转目标宽表的逻辑,无需提前获知福利项的具体取值,自动完成结构转换,核心使用pandas内置的wide_to_long和pivot_table函数实现,适配性强。

完整代码示例

import pandas as pd

# 假设原始数据存储在df_raw变量中
# 第一步:将配对的Benefit N、Total N列批量转成长格式
df_long = pd.wide_to_long(
    df_raw,
    stubnames=["Benefit", "Total"], # 指定配对列的前缀
    i=["Country", "Employee Name"], # 指定不变的标识符列作为索引
    j="benefit_group", # 后缀序号存储的列名
    sep=" " # 前缀和后缀之间的分隔符
).dropna(subset=["Benefit"]) # 剔除无福利记录的空行
df_long = df_long.reset_index()

# 第二步:将长表转成目标宽表,自动生成福利列
df_result = df_long.pivot_table(
    index=["Country", "Employee Name"],
    columns="Benefit", # 所有唯一福利项自动转为列名
    values="Total",
    aggfunc="sum" # 若存在同一员工同一福利多条记录,可自定义聚合规则,无重复场景用first也可
).reset_index().rename_axis(columns=None) # 清除列名的索引标识

方案优势

  • 完全不需要提前获知福利项的取值,自动识别所有唯一福利生成对应列
  • 扩展性强,后续新增福利组(如Benefit 4+Total 4)无需修改核心逻辑,直接兼容
  • 自动过滤无效空值,运算效率高
  • 兼容同员工同福利多记录的场景,可灵活调整聚合规则

注:你给出的预期结果中Employee 2的Health Insurance为100.0属于笔误,按原始数据计算结果应为1000.0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 00:45:01