我们如何使用 python 拒绝滚动平均期间包含异常值的 window?

How can we reject a window containing an outlier during rolling average using python?

我面临的问题是,在使用 python pandas?

澄清一下:

df = df['speed'].rolling(10).mean() 
outlier_lower_bound = 0
outlier_upper_bound = 15

df.max()

现在如何拒绝/不考虑这 10 个周期的平均值 window 如果它包含异常值?

最终目标是在不考虑/考虑 10 个周期的 window 的情况下获得最大移动平均线(如果它包含异常值)提前致谢!

您只需一行即可解决您的问题:

_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 的 lambda 函数,它将您边界之外的任何值转换为 inf
  • 在包含 inf 的 window 上应用 mean 时,结果将是 Nan
  • 最后,我删除所有 Nan 值,这将模拟相同的效果。