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

如何将DataFrame的Date列转为表头,以多列作为索引进行透视?

Pandas长表转宽表:将Date列转为列名填充Value值

这是个很常见的结构化数据重塑需求,咱们用Pandas的pivot()方法就能完美解决,下面是具体实现步骤:

1. 先构造原始测试DataFrame

首先把你给出的原始数据用代码还原,方便你直接测试:

import pandas as pd

df = pd.DataFrame({
    'Entity': [111, 111, 222, 333],
    'Name': ['Name1', 'Name2', 'Name3', 'Name1'],
    'Date': ['2018-03-31', '2018-02-28', '2018-02-28', '2018-01-31'],
    'Value': [100, 200, 1000, 2000]
})

2. 执行转宽操作

核心就是用pivot()方法,明确指定行索引、新列名的来源和填充值的来源:

wide_df = df.pivot(index=['Entity', 'Name'], columns='Date', values='Value').reset_index()

参数说明:

  • index=['Entity', 'Name']:因为不同Entity可能存在相同的Name,所以把这两列作为联合行索引,确保每一行的唯一性
  • columns='Date':将Date列的所有唯一值转换为新的列名
  • values='Value':用Value列的对应值填充新列的单元格
  • reset_index():把联合索引重新转为普通列,还原成你需要的结构

3. 优化列名显示(可选)

转完之后Date会作为列的层级标签,咱们可以把它去掉,让输出更清爽:

wide_df.columns.name = None  # 移除列名的层级标记

最终输出结果

执行完上述代码后,就能得到和需求完全一致的DataFrame:

Entity    Name  2018-01-31  2018-02-28  2018-03-31
0     111   Name1         NaN         NaN       100.0
1     111   Name2         NaN       200.0         NaN
2     222   Name3         NaN      1000.0         NaN
3     333   Name1      2000.0         NaN         NaN

如果你的数据中存在同一(Entity, Name, Date)组合有重复值的情况,pivot()会报错,这时候可以改用pivot_table()并指定聚合函数(比如aggfunc='mean')来处理重复值哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:25:15