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

如何用Pandas将Year设为索引、Job Title设为字段重构DataFrame

Pandas 数据透视表实现按年份和职位整理薪资数据

问题场景

现有如下Pandas DataFrame:

Index         Job Title                      Year               Salary

0     POL - POL 47 HQ Police Chief           2022               243000

1     POL - POL 47 HQ Police Chief           2023               258000

2     CAT - CAT 30 County Attorney           2022               220000

3     CAT - CAT 30 County Attorney           2022               236000

4     CAT - CAT 30 County Attorney           2023               258000

5     DOT - DOT 50 Director                  2022               228000

6     DOT - DOT 50 Director                  2023               244000

7     POL - HQ Police Chief                  2019               239566

8     POL - HQ Police Chief                  2020               225000

9     POL - HQ Police Chief                  2021               236000

10    IGR - IGR 20 Director                  2022               232000

11    IGR - IGR 20 Director                  2023               232000

12    FIN - FIN 32 Director                  2022               220000

13    FIN - FIN 32 Director                  2023               236000

14    PRO - PRO 35 Procurement Director      2022               220000

需实现:

  • 将唯一Year值设为索引
  • 将唯一Job Title设为列名
  • 用Salary值填充对应交叉单元格,无对应值时显示NaN或0

期望效果示例:

POL - HQ Police Chief         FIN - FIN 32 Director       PRO - PRO 35 Procurement Director

2019           239566                           NaN                              NaN

2020           225000                           NaN                              NaN

2021           236000                           NaN                              NaN

2022           NaN                              220000                           220000

2023           NaN                              236000                           NaN

此前尝试常规索引转置操作,结果存在大量重复冗余,无法满足需求。

解决方案

可以用Pandas的pivot_table或pivot方法实现,推荐优先用pivot_table,因为它能自动处理同一(年份+职位)组合下的重复薪资值。

方法1:使用pivot_table(适配有重复组合的场景)

import pandas as pd

# 假设你的DataFrame名为df
pivoted_df = df.pivot_table(
    index='Year',
    columns='Job Title',
    values='Salary',
    aggfunc='first'  # 取该组合下第一条薪资,可替换为'mean'取平均、'sum'求和等
)

# 若需将NaN替换为0,执行以下代码
# pivoted_df = pivoted_df.fillna(0)

方法2:使用pivot(需确保无重复组合)

如果确认每个(年份+职位)组合仅对应一条薪资数据,或先对数据去重后,可使用pivot:

# 先去除重复的(年份+职位)组合
df_unique = df.drop_duplicates(subset=['Year', 'Job Title'])
# 生成交叉表
pivoted_df = df_unique.pivot(index='Year', columns='Job Title', values='Salary')

关键说明

  • pivot_table的aggfunc参数可按需调整:比如同一职位同一年有多条薪资时,用'mean'计算平均值,'sum'求和,'last'取最后一条记录。
  • 最终生成的pivoted_df即为目标结构,年份作为索引,职位作为列,无数据的单元格默认显示NaN,可通过fillna(0)替换为0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 02:22:49