如何在Pandas DataFrame中按指定月组计算分组累积和?
解决Pandas按自定义季度分组计算组内kpi累积和的问题
问题分析
你的代码当前仅按kpi字段全局计算re_o的累积和,没有结合自定义的季度分组规则,导致累积值跨季度累加,不符合预期需求。需要同时按自定义季度组和kpi两个维度分组,再计算组内累积和。
解决方案
- 定义自定义季度的映射关系,将每个月份对应到指定分组;
- 为DataFrame新增季度分组列;
- 按
季度分组+kpi组合分组,计算组内re_o的累积和。
完整代码
import pandas as pd data = { 'month': ['April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December', 'January', 'February', 'March'], 'kpi': ['sales', 'sales quantity', 'sales', 'sales', 'sales', 'sales', 'sales', 'sales quantity', 'sales', 'sales', 'sales', 'sales'], 're_o': [1, 1, 1, 11, 11, 11, 12, 12, 12, 13, 13, 13] } df = pd.DataFrame(data) # 定义自定义季度分组映射 quarter_map = { 'April': 'Q1', 'May': 'Q1', 'June': 'Q1', 'July': 'Q2', 'August': 'Q2', 'September': 'Q2', 'October': 'Q3', 'November': 'Q3', 'December': 'Q3', 'January': 'Q4', 'February': 'Q4', 'March': 'Q4' } # 新增季度分组列 df['quarter_group'] = df['month'].map(quarter_map) # 按季度分组和kpi分组,计算组内累积和 df['Q-Total'] = df.groupby(['quarter_group', 'kpi'], sort=False)['re_o'].cumsum() # 可选:删除临时的quarter_group列 # df = df.drop('quarter_group', axis=1) print(df)
运行结果
month kpi re_o quarter_group Q-Total 0 April sales 1 Q1 1 1 May sales quantity 1 Q1 1 2 June sales 1 Q1 2 3 July sales 11 Q2 11 4 August sales 11 Q2 22 5 September sales 11 Q2 33 6 October sales 12 Q3 12 7 November sales quantity 12 Q3 12 8 December sales 12 Q3 24 9 January sales 13 Q4 13 10 February sales 13 Q4 26 11 March sales 13 Q4 39
关键说明
- 通过
quarter_map将每个月份映射到自定义分组,确保同一季度组的月份归为一类; - 使用
groupby(['quarter_group', 'kpi'])实现双维度分组,保证累积和仅在同一季度组+同一kpi内计算; sort=False保持原始数据的顺序,避免分组后打乱行顺序。
内容的提问来源于stack exchange,提问作者Abin Benny
相关产品推荐
相关产品推荐

