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

如何在多索引Pandas DataFrame中按年度、mapid及service计算cumsum()?

按年度对多索引DataFrame的指定分组计算累计求和(cumsum)

我来帮你搞定这个多索引DataFrame的年度累计求和问题!你的需求很明确:基于mapid和service这两个索引维度,在每个年度内计算cost的累计求和,对吧?咱们一步步来实现:

先理清楚数据结构

你的combined_df是按datetime(月度)、provider、mapid、service聚合后的多索引DataFrame,核心是要在同一年度内,对每个mapid+service+provider的组合,按时间顺序累计求和。

具体实现代码

这里有两种简洁的实现方式,你可以选自己顺手的:

方式1:新增年份列辅助分组

# 从datetime索引中提取年份,新增为临时列
combined_df['year'] = combined_df.index.get_level_values('datetime').year

# 按年度、服务商、mapid、service分组,计算累计求和
combined_df['cumulative_cost'] = combined_df.groupby(['year', 'provider', 'mapid', 'service'])['cost'].cumsum()

# 如果不需要保留year列,执行下面的代码删掉它
# combined_df.drop('year', axis=1, inplace=True)

方式2:直接用索引年份分组(无需新增列)

# 直接在groupby中使用索引的年份作为分组键
combined_df['cumulative_cost'] = combined_df.groupby(
    [
        combined_df.index.get_level_values('datetime').year,
        'provider',
        'mapid',
        'service'
    ]
)['cost'].cumsum()

效果验证

拿你示例里的Amazon-10147.0-Monitor组合来说,计算后的累计值应该是:

  • 2017-08-31:0.41
  • 2017-09-30:0.41 + 0.89 = 1.30
  • 2017-10-31:1.30 + 0.17 = 1.47
  • 2017-11-30:1.47 + 0.35 = 1.82
    完全符合你想要的年度内累计逻辑~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:20:43