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

如何将Pandas DataFrame列中的日期转换为新列?

解决方法:Pandas长表转宽表(日期转新列)

没问题!这在Pandas里是很常见的长表转宽表操作,用pivot()或pivot_table()就能轻松实现,我给你具体步骤和示例:

1. 先明确场景(模拟你的原始DataFrame)

假设左侧表格的结构是这样的(日期单独一列,还有分类列、数值列):

import pandas as pd

# 模拟左侧的原始数据
df = pd.DataFrame({
    "类别": ["产品A", "产品A", "产品B", "产品B"],
    "日期": ["2024-01-01", "2024-01-02", "2024-01-01", "2024-01-02"],
    "销售额": [1500, 2300, 900, 1800]
})

2. 无重复数据时用pivot()

如果你的「分类列+日期」组合没有重复值(比如每个产品每天只有一条数据),直接用pivot()就能转成右侧的宽表样式:

# 核心转换代码
wide_df = df.pivot(
    index="类别",       # 作为行的列(对应右侧表格的行标题)
    columns="日期",     # 要转成新列的列(就是你的日期列)
    values="销售额"     # 填充到新列里的数值内容
).reset_index()

# 清理列名的默认层级(让列名更干净)
wide_df.columns.name = None

执行后得到的wide_df就是右侧表格的结构:「类别」作为第一列,每个日期作为单独的列,对应填充销售额数据。

3. 有重复数据时用pivot_table()

如果同一个分类在同一天有多条数据(比如同一个产品当天有多次销售记录),需要用pivot_table()配合聚合函数处理:

# 用求和聚合重复数据,也可以用mean、max等
wide_df = df.pivot_table(
    index="类别",
    columns="日期",
    values="销售额",
    aggfunc="sum"  # 聚合方式,根据需求选sum/mean/max等
).reset_index()

wide_df.columns.name = None

4. 扩展:多数值列的情况

如果你的表格有多个数值列(比如同时有销售额、利润),可以一次性转换所有数值列:

# 模拟带多数值列的原始数据
df = pd.DataFrame({
    "类别": ["产品A", "产品A", "产品B", "产品B"],
    "日期": ["2024-01-01", "2024-01-02", "2024-01-01", "2024-01-02"],
    "销售额": [1500, 2300, 900, 1800],
    "利润": [300, 460, 180, 360]
})

# 转换多数值列
wide_df = df.pivot(index="类别", columns="日期", values=["销售额", "利润"]).reset_index()

# 把多层列名扁平化(比如变成「销售额_2024-01-01」)
wide_df.columns = ['_'.join(col).strip() for col in wide_df.columns.values]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:58:02