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

如何对DataFrame执行分组与透视操作,实现长表到指定宽表的转换

实现方法

完全可以实现,你需要的就是长表转宽表的透视操作,pandas的透视方法本身就内置了按指定维度分组的逻辑,不需要额外单独执行分组操作。
下面是三种常用实现方案:

方案1:用pandas.DataFrame.pivot

适合无重复分组的场景,也就是你的样例数据这种同一个Company+Period+Names组合只有一行值的情况:

import pandas as pd

# 构造原始DataFrame
df = pd.DataFrame({
    'Names': ['HeadCount', 'HoursWorked', 'HeadCount', 'HoursWorked', 'HeadCount', 'HoursWorked'],
    'Company': ['Google', 'Google', 'Microsoft', 'Microsoft', 'Google', 'Google'],
    'Values': [1000, 500, 600, 200, 2000, 100],
    'Period': [1,1,1,1,2,2]
})

# 透视转换
result = df.pivot(
    index=['Company', 'Period'],  # 保留的分组维度,作为结果行索引
    columns='Names',              # 要展开为新列的字段
    values='Values'               # 新列的取值来源字段
).reset_index()  # 把Company和Period从索引恢复为普通列

# 可选:去除列名的索引前缀,和目标格式完全对齐
result.columns.name = None

运行后得到的result就是你需要的结构。

方案2:用pandas.DataFrame.pivot_table

适合有重复分组、需要聚合的场景,比如同一个Company+Period+Names对应多个Values需要求和/求均值的情况,兼容性更强:

result = df.pivot_table(
    index=['Company', 'Period'],
    columns='Names',
    values='Values',
    aggfunc='sum'  # 重复值的聚合规则,可根据需求改成'mean'/'max'等
).reset_index()
result.columns.name = None

方案3:用groupby+unstack组合

和透视操作逻辑完全等价,适合习惯用分组语法的场景:

result = df.groupby(['Company', 'Period', 'Names'])['Values'].sum().unstack('Names').reset_index()
result.columns.name = None

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:18:04