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

Pandas三级MultiIndex匹配两层索引后计算数值列月度环比差

Pandas三级MultiIndex分组跨期差值计算方案

核心逻辑:你的需求本质是固定Bucket、Salary两个维度不变,按时间维度(Date)做相邻行差分,直接利用MultiIndex的层级分组即可实现,不需要手动遍历索引。


前置操作

先保证DataFrame索引按规则排序,确保每个(Bucket, Salary)分组下的Date为升序排列:

summary = summary.sort_index()

MultiIndex的sort_index()默认按层级从外到内升序排列,排序后完全符合差分的时间顺序要求。


实现代码

单字段单独计算(以Price为例)

# 按索引第1、2层级(Bucket、Salary)分组,组内直接做相邻行差分
summary['Price_diff'] = summary.groupby(level=[1,2])['Price'].diff()

批量计算四个数值列的差值

# 批量生成四个字段的差分结果,列名自动加_diff后缀
diff_result = summary.groupby(level=[1,2])[['Price','Cost','Value','Gross']].diff().add_suffix('_diff')
# 合并差分结果到原表
summary = pd.concat([summary, diff_result], axis=1)

原代码失效原因

  • 遍历逻辑错误:你遍历的是最外层Date的取值,每次取单个日期下的所有Price数据做diff,实际是在同一日期的不同Bucket、Salary数据之间算差值,完全不符合跨日期计算的需求
  • 赋值方式不安全:summary.Price_diff[idx] = ...属于链式赋值,会触发Pandas的SettingWithCopyWarning,大概率不会写入原表,反而生成副本导致修改失效

内容的提问来源于stack exchange,提问作者a.r. noureldin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:24:10