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

如何在Pandas分组后保持MMM-YY顺序并按Expense字母排序

按指定分组规则聚合支出数据并排序

前置数据处理代码

import numpy as np
import pandas as pd

d1 = pd.DataFrame({"Date" : ['1/1/2022', '12/15/2010', '6/1/2015', '1/31/2022', '12/31/2010', '3/10/2009', '1/7/2022', '12/9/2010','12/20/2010','1/13/2022'],
           "Expense": ['Food', 'Food', 'Gasoline', 'Coffee', 'Coffee', 'PayPal', 'Gasoline', 'Gasoline','Gasoline','Coffee'],
           "Total": [3.89, 7.00, 11, 0.99, 8.01, 99, 76, 50,48,9]})

# 将Date列转为datetime类型
d1['Date'] = pd.to_datetime(d1['Date'])

# 从Date列生成MMM-YY列
d1['MMM-YY'] = d1['Date'].dt.strftime('%b') + '-' + d1['Date'].dt.strftime('%y')

# 按Date列对DataFrame排序
d1.sort_values('Date', inplace=True)

处理后的数据

Date        Expense   Total  MMM-YY
5   2009-03-10  PayPal    99.00  Mar-09
7   2010-12-09  Gasoline  50.00  Dec-10
1   2010-12-15  Food      7.00   Dec-10
8   2010-12-20  Gasoline  48.00  Dec-10
4   2010-12-31  Coffee    8.01   Dec-10
2   2015-06-01  Gasoline  11.00  Jun-15
0   2022-01-01  Food      3.89   Jan-22
6   2022-01-07  Gasoline  76.00  Jan-22
9   2022-01-13  Coffee    9.00   Jan-22
3   2022-01-31  Coffee    0.99   Jan-22

需求描述

需要按MMM-YY(月份)和Expense(支出类型)分组,对Total列求和,核心要求:

  • 保持MMM-YY列的升序排列(与处理后的d1一致)
  • 每个MMM-YY分组内的Expense按字母顺序排序

解决方案

要实现需求,关键是让MMM-YY保留原时间顺序(而非字符串默认排序),同时在分组内对Expense按字母排序:

# 提取MMM-YY的有序类别,保留原时间排序
mmm_yy_order = d1['MMM-YY'].unique()
d1['MMM-YY'] = pd.Categorical(d1['MMM-YY'], categories=mmm_yy_order, ordered=True)

# 按MMM-YY和Expense分组求和
agg_result = d1.groupby(['MMM-YY', 'Expense'], as_index=False)['Total'].sum()

# 按MMM-YY(有序类别)和Expense字母顺序排序
agg_result = agg_result.sort_values(['MMM-YY', 'Expense'])

# 设置多级索引并格式化输出,匹配期望样式
agg_result = agg_result.set_index(['MMM-YY', 'Expense'])
agg_result['Total'] = agg_result['Total'].round(2)
print(agg_result.to_string())

输出结果

Total
MMM-YY Expense          
Mar-09 PayPal      99.00
Dec-10 Coffee       8.01
       Food         7.00
       Gasoline    98.00
Jun-15 Gasoline    11.00
Jan-22 Coffee       9.99
       Food         3.89
       Gasoline    76.00

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:55:36