带movement分组条件的pandas rolling滚动求和实现问题求助
解决方法
你需要先按movement字段分组隔离不同方向的数据集,再在每个分组内独立执行滚动计算,即可避免跨分组数值累加的问题,参考代码如下:
import pandas as pd # 假设你的原始数据存储在DataFrame变量df中 df['rolling value'] = df.groupby('movement', group_keys=False)['value'].apply( lambda s: s.rolling(4).sum().shift(-3) )
说明
groupby('movement')会将所有right和Left的数据拆分为两个独立分组,滚动计算只会在分组内执行,不会把不同方向的数值纳入同一个窗口group_keys=False参数可以避免分组后生成多余的索引层级,计算结果可以直接匹配原表的行顺序- 每个分组内不足4个有效数据的位置会自动返回NaN,和你期望的输出结果完全一致
如果之前用groupby报错,大概率是直接对groupby对象链式调用rolling和shift的写法存在版本兼容问题,上述用apply包裹计算逻辑的写法适配pandas 1.0及以上所有版本,不会出现报错。
内容的提问来源于stack exchange,提问作者joshuah9
相关产品推荐
相关产品推荐

