如何重组Pandas DataFrame:以分类为行、月份为列并添加总计列
Pandas数据重组解决方案
按以下步骤即可实现需求:
- 转换日期格式:将原
date列的YYYY-MM格式转为MMM-YY缩写格式 - 透视重组数据:通过透视表将
concept设为行索引,转换后的日期设为列,缺失值填充为0 - 添加总计列:计算每行的金额总和,生成
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
相关产品推荐
相关产品推荐

