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

如何在MultiIndex DataFrame执行groupby/rolling操作后保留日期索引

问题原因

你遇到的内层索引丢失问题是Pandas版本差异导致的:

  • 你使用的Pandas 1.1.5属于较旧版本,groupby.rolling接口的返回值默认仅保留分组键(也就是此处的id)作为单层级索引,会丢弃原始的内层date索引
  • Pandas 1.3.0及之后的版本优化了该接口行为,groupby.rolling默认会保留原始数据的全部索引层级,也就是你在网上看到的示例效果

解决方法

无需升级Pandas,两种常用方案都可以得到保留id+date两层索引的结果:

方案1:使用transform直接保留原始索引

transform方法会自动保持返回结果和原始输入的索引结构一致,代码最简洁:

df = df.groupby(level='id')['d1'].transform(lambda x: x.rolling(window=2).sum())

如果需要把计算结果作为新列追加到原DataFrame,也可以直接赋值:

df['d1_roll_sum'] = df.groupby(level='id')['d1'].transform(lambda x: x.rolling(2).sum())

方案2:手动替换回原始索引

因为groupby.rolling的计算结果顺序和原始数据的顺序完全对应,直接把原始索引赋值给计算结果即可:

# 先保存原始的两层索引
original_index = df.index
# 执行滚动求和计算
df = df.groupby(level='id').rolling(window=2)['d1'].sum()
# 替换回原始索引
df.index = original_index

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:45:03