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

如何用Pandas实现按日期分组并转换为指定格式的DataFrame?

解决方案

首先修正你代码里的语法错误:['Value]漏了闭合引号,不过就算修正后,这种方式得到的是每行存列表的结构,没法直接展开成你要的多行多列格式。下面是两种直接实现需求的方法:

方法1:用cumcount生成组内序号 + pivot透视

这是最直观的方式,先给每个日期组内的行添加一个连续序号,再通过透视把日期转成列:

import pandas as pd

# 构造你的原始DataFrame
df = pd.DataFrame({
    'Value': [1,2,3,4,5,6,7,8,9],
    'Date': ['2022-01-01']*3 + ['2022-01-02']*3 + ['2022-01-03']*3
})

# 生成每个日期组内的行序号
df['row_idx'] = df.groupby('Date').cumcount()

# 透视转换:行是组内序号,列是日期,值是Value
result = df.pivot(index='row_idx', columns='Date', values='Value')

# 调整索引和列名格式,匹配你想要的输出
result.index.name = 'Date'
result.columns.name = None

print(result)

运行后输出就是你要的结果:

Date    2022-01-01  2022-01-02  2022-01-03
0                1           4           7
1                2           5           8
2                3           6           9

方法2:用set_index + unstack快速实现

这种方式更简洁,一步到位:

result = df.set_index([df.groupby('Date').cumcount(), 'Date'])['Value'].unstack()
result.index.name = 'Date'
result.columns.name = None

为什么你的原代码不行?

你写的df.groupby('Date')['Value'].apply(list).to_frame.T(修正引号后)会生成一个单行DataFrame,每个单元格是对应日期的Value列表,比如:

Date  2022-01-01  2022-01-02  2022-01-03
0     [1,2,3]    [4,5,6]    [7,8,9]

这和你需要的把列表展开成多行的结构完全不同,所以没法直接用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:20:34