我面临的问题是,在使用python pandas计算滚动平均时,如果10行中有一行或多行包含一个离群值,我如何拒绝一个窗口?
澄清一下。
df = df['speed'].rolling(10).mean()
outlier_lower_bound = 0
outlier_upper_bound = 15
df.max()
现在我如何拒绝不考虑这10个周期窗口的平均值,如果它包含一个离群值?
最终的目标是得到最大的移动平均线,而不考虑10期窗口的平均值,如果它包含一个离群值。
你可以只用一行来解决你的问题,就像这样。
_filter = lambda x: float("inf") if x > outlier_upper_bound or x < outlier_lower_bound else x
df["speed"].apply(_filter).rolling(10).mean().dropna()
我的代码背后的想法可以通过这些步骤来理解。
_filter
边界外的任何价值都会转化为 inf
.mean
窗户上 inf
在其中,结果将是 Nan
.Nan
的值,这将模仿同样的效果。