使用Pandas Rolling函数求后续140行最大值结果不符,求助排查
问题分析与解决
你的代码出错原因是pandas的rolling()默认使用向前滑动窗口,也就是计算当前行及之前的窗口内数据的最大值。你的数据是从0到999的递增序列,所以每个位置的向前窗口最大值就是当前行的值,这就导致了输出和预期不符。
你需要的是向后滑动窗口(当前行 + 后续140行,共141行)的最大值,解决方法是先反转数据,计算向前窗口的最大值后再反转回来:
import pandas as pd # Sample DataFrame df = pd.DataFrame({'clicks': [i for i in range(1000)]}) # 反转Series计算向前窗口max,再反转得到向后窗口结果 roll = df['clicks'][::-1].rolling(window=141, min_periods=1).max()[::-1] print(roll.head())
运行后输出:
0 140.0 1 141.0 2 142.0 3 143.0 4 144.0
注:你预期的第0行输出为141.0是有误的,因为第0行的后续140行是索引1到140,对应数值1到140,加上当前行0,最大值应为140.0。
内容的提问来源于stack exchange,提问作者B Grau
相关产品推荐
相关产品推荐

