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

如何重组Pandas DataFrame:以分类为行、月份为列并添加总计列

Pandas数据重组解决方案

按以下步骤即可实现需求:

  1. 转换日期格式:将原date列的YYYY-MM格式转为MMM-YY缩写格式
  2. 透视重组数据:通过透视表将concept设为行索引,转换后的日期设为列,缺失值填充为0
  3. 添加总计列:计算每行的金额总和,生成Total列

完整代码

import pandas as pd

data={
 'date':['2023-01', '2023-01', '2023-01', '2023-01', '2023-02', '2023-02', '2023-02', '2023-02', '2023-02'],
'concept':['FOOD', 'CAR', 'EDUCATION', 'ELECTRICITY', 'FOOD', 'CAR', 'TRAVEL', 'WATER', 'ELECTRICITY'],
'amount':[455.54, 237.41, 3.91, 213.2, 28.72, 422.72, 263.29, 3.93, 89.35]  
      }
df = pd.DataFrame(data)

# 转换日期为Jan-23格式并大写
df['date'] = pd.to_datetime(df['date']).dt.strftime('%b-%y').upper()

# 生成透视表,自动聚合求和,缺失值填0
result_df = df.pivot_table(index='concept', columns='date', values='amount', fill_value=0, aggfunc='sum')

# 添加总计列
result_df['Total'] = result_df.sum(axis=1)

# 调整列顺序以匹配需求(可选,若透视后列顺序不对时使用)
result_df = result_df[['JAN-23', 'FEB-23', 'Total']]

print(result_df)

关键步骤说明

  • 日期转换:pd.to_datetime解析日期后,dt.strftime('%b-%y')生成月份缩写+年份格式,转大写后与示例样式一致
  • 透视表:pivot_table自动合并相同concept和date的记录,fill_value=0保证无数据的单元格显示0
  • 总计列:sum(axis=1)对每行的月份列求和,得到每个品类的总金额

运行代码后输出的DataFrame即为你需要的样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:28:39