如何按年月对DataFrame数据求和并生成指定格式透视表
解决方案
可以使用 Pandas 的日期处理与透视表功能实现需求,步骤如下:
1. 转换日期格式
首先确保 DATE 列是 datetime 类型:
import pandas as pd # 转换DATE列为datetime格式 df['DATE'] = pd.to_datetime(df['DATE'])
2. 提取年份和月份名称
从日期中提取年份和月份全称:
# 提取年份 df['year'] = df['DATE'].dt.year # 提取月份名称(如January、February) df['month'] = df['DATE'].dt.month_name()
3. 生成目标透视表
按年份和月份分组求和,再转换为行列交叉的格式:
# 分组计算月度总和并转为透视表,缺失值填充为0 result = df.groupby(['year', 'month'])['X.'].sum().unstack(fill_value=0) # 强制月份按自然顺序排列 month_order = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] result = result.reindex(columns=month_order)
结果示例
处理后的数据表结构如下:
| year | January | February | ... | December |
|---|---|---|---|---|
| 1982 | 0 | 0 | ... | -0.5 |
| 1983 | 0 | 0 | ... | 0 |
| 2022 | 0.8 | 0 | ... | 0 |
关键说明
groupby(['year', 'month'])['X.'].sum():计算每个年份-月份组合的X.列总和unstack(fill_value=0):将行索引中的月份转为列,缺失的月份值填充为0reindex:确保月份按从一月到十二月的自然顺序排列
内容的提问来源于stack exchange,提问作者Jacques Tebeka
相关产品推荐
相关产品推荐

