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

Pandas groupby下不使用transform实现移位滚动平均的异常问题

异常原因

调用groupby("RaceID")["wS"].expanding().mean()得到的是带两级索引的Series,第一级索引为分组键RaceID,第二级索引为原DataFrame的行索引。此时直接调用.shift()时,Pandas会将整个Series视作连续的一维序列执行移位,不会识别分组边界,因此会出现前一分组的最后一个值被写入后一分组首个位置的异常。
而transform方法内的.shift()作用于每个独立分组内部,会自动将每个分组移位后的第一个值设为NaN,不存在跨分组数据泄漏的问题。

修复方案

只需将shift()操作放在分组维度下执行,即可在保留向量化操作高性能优势的前提下得到正确结果,修改后代码如下:

b = df.groupby("RaceID")["wS"].expanding().mean().groupby(level=0).shift().sort_index(level=1).droplevel(0)

逻辑说明:在完成全部分组的扩展滚动平均计算后,新增groupby(level=0)指定按第一级索引(即分组键RaceID)重新分组后再执行移位,此时移位操作仅在每个分组内部生效,和transform实现的逻辑完全一致,性能损耗可忽略。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:06:01