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

如何将带日期索引的pandas DataFrame转为年份为索引、月份为列的汇总表

pandas 日期表转换实现方案

基于你现有代码的后续补充方案

你已经完成了月度聚合操作后,只需要从聚合结果的时间索引中提取年份、月份信息,再做一次维度转换即可,完整可运行代码如下:

# 你已有的代码片段
import pandas as pd
df=pd.DataFrame([
 {'data_date': '2016-01-01', 'value': 1},
 {'data_date': '2016-01-02', 'value': 2},
 {'data_date': '2017-02-05', 'value': 3},
 {'data_date': '2017-02-07', 'value': 4},
 {'data_date': '2017-03-09', 'value': 5}])
df['data_date'] = pd.to_datetime(df['data_date'])
df.set_index('data_date', inplace=True)
grp_df = df.groupby([pd.Grouper(freq='M')]).sum()

# 新增维度转换代码
# 提取年份、月份缩写信息
grp_df['year'] = grp_df.index.year
grp_df['month'] = grp_df.index.strftime('%b')
# 生成以年为索引、月为列的结果表
result = grp_df.pivot(index='year', columns='month', values='value')
# 调整列顺序为1-12月自然排序,无数据默认填充为0,可替换为你需要的`xx`占位符
month_order = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
result = result.reindex(columns=month_order, fill_value=0)

更简洁的一步到位实现方案

不需要提前做月度聚合,直接从原始数据提取时间维度拆分后分组展开即可:

import pandas as pd
df=pd.DataFrame([
 {'data_date': '2016-01-01', 'value': 1},
 {'data_date': '2016-01-02', 'value': 2},
 {'data_date': '2017-02-05', 'value': 3},
 {'data_date': '2017-02-07', 'value': 4},
 {'data_date': '2017-03-09', 'value': 5}])
df['data_date'] = pd.to_datetime(df['data_date'])

# 直接提取年、月维度后聚合展开
df['year'] = df['data_date'].dt.year
df['month'] = df['data_date'].dt.strftime('%b')
result = df.groupby(['year', 'month'])['value'].sum().unstack(fill_value=0)
# 调整月份列按1-12月排序
month_order = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
result = result.reindex(columns=month_order, fill_value=0)

运行后得到的result表完全符合你的预期格式,你可以直接打印查看输出效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:45:00