Pandas按DIVISION等3字段分组重置的MONTH维度累计求和问题
累计和计算错误解决方案
问题根因
你之前使用groupby(level=3)计算累计和的逻辑错误:level=3对应多级索引的第4个字段MONTHS,相当于按月份分组计算累计和,不符合你要求的「按DIVISION、MODEL、QTR三个字段分区,分区字段任意变化就重置累计」的逻辑。
方案1:转普通DataFrame计算(可读性更高)
- 聚合时直接生成非多级索引的DataFrame
df_agg = df.groupby(['DIVISION','MODEL','QTR','MONTHS'], as_index=False)['X'].sum()
- 按分区字段+月份排序,保证月份从小到大的累计顺序
df_agg = df_agg.sort_values(by=['DIVISION','MODEL','QTR','MONTHS'])
- 按三个分区字段分组,组内计算累计和
df_agg['CUMSUM'] = df_agg.groupby(['DIVISION','MODEL','QTR'])['X'].cumsum()
方案2:保留多级索引结构计算
如果需要保留聚合后的多级索引结构,直接指定前三个索引层级作为分组键即可,你的聚合代码生成的多级索引顺序为[DIVISION, MODEL, QTR, MONTHS],对应level 0~3,因此取前三个level分组:
# 你的原聚合代码,得到多级索引Series df = df.groupby(['DIVISION','MODEL','QTR','MONTHS'])['X'].sum() # 按前三个索引层级分组,组内计算累计和 df['cumsum'] = df.groupby(level=[0,1,2]).cumsum()
内容的提问来源于stack exchange,提问作者JF4bes
相关产品推荐
相关产品推荐

