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

如何用Pandas将DataFrame重塑为日期作为顶层列的子列结构?

解决DataFrame列层级重塑问题

问题原因

你之前的代码存在两个关键问题:

  • 调用方式错误:需使用df.pivot()方法,而非直接df(index=...)的写法
  • 默认列层级顺序不符合需求:pivot默认将品类(groceries/entertainment)设为顶层列,日期作为子列,和你想要的结构相反

正确实现步骤

1. 无重复数据场景

如果personName与Date的组合没有重复记录,直接用pivot后交换列层级即可:

# 正确调用pivot方法生成透视表
pivoted = df.pivot(index='personName', columns='Date', values=['groceries', 'entertainment'])
# 交换列层级,将Date移至顶层,品类作为子列并排序
pivoted = pivoted.swaplevel(axis=1).sort_index(axis=1)

2. 有重复数据场景

如果同一用户同一天存在多条消费记录,改用pivot_table并指定聚合函数(如求和):

pivoted = df.pivot_table(
    index='personName',
    columns='Date',
    values=['groceries', 'entertainment'],
    aggfunc='sum'  # 可根据需求替换为mean、max等
)
# 同样交换层级并排序
pivoted = pivoted.swaplevel(axis=1).sort_index(axis=1)

效果示例

假设原始数据为:

personNameDategroceriesentertainment
Alice2024-01-015030
Bob2024-01-014025
Alice2024-01-026040

执行代码后,输出的列结构会是:

Date          2024-01-01          2024-01-02        
              groceries entertainment groceries entertainment
personName                                                 
Alice               50            30        60            40
Bob                 40            25         NaN           NaN

(若需将空值填充为0,可追加pivoted = pivoted.fillna(0))

内容的提问来源于stack exchange,提问作者Novice Python charmer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:07:10