需求:按Item与月份分组汇总Qty,生成对应月份列
实现按物品和月份汇总数量的透视表
需求说明
将原始的日期-物品-数量数据,按Item分组,按月份生成对应列,汇总每个物品在各月份的Qty总和,无数据的月份填充为0。
实现代码(基于Python Pandas)
import pandas as pd # 1. 加载原始数据 data = { 'Date': ['2022-01-01', '2022-01-01', '2022-01-01', '2022-02-01', '2022-02-01'], 'Item': ['A', 'A', 'B', 'A', 'C'], 'Qty': [10, 30, 40, 20, 10] } df = pd.DataFrame(data) # 2. 提取月份大写缩写 df['Month'] = pd.to_datetime(df['Date']).dt.strftime('%b').str.upper() # 3. 创建透视表并填充缺失值 pivot_df = df.pivot_table( index='Item', columns='Month', values='Qty', aggfunc='sum', fill_value=0 ).reset_index() # 4. 调整列顺序(确保按时间排序,可选) month_order = ['JAN', 'FEB'] pivot_df = pivot_df[['Item'] + month_order] # 查看结果 print(pivot_df)
代码解释
- 加载数据:将原始表格数据转换为Pandas DataFrame,这是数据处理的基础结构。
- 提取月份:把
Date列转为日期类型后,用dt.strftime('%b')获取英文月份缩写,再转大写得到JAN/FEB格式的月份标识。 - 透视表聚合:使用
pivot_table实现行(Item)、列(Month)的分组求和,fill_value=0确保无数据的月份显示为0。 - 调整列顺序:手动指定月份顺序,避免因缩写字母顺序导致列乱序(比如如果有MAR,不会排在FEB前面)。
最终结果
| Item | JAN | FEB |
|---|---|---|
| A | 40 | 20 |
| B | 40 | 0 |
| C | 0 | 10 |
内容的提问来源于stack exchange,提问作者Max Mamazita
相关产品推荐
相关产品推荐

