在使用python计算滚动平均时,我们如何拒绝一个包含离群值的窗口?

问题描述 投票:0回答:1

我面临的问题是,在使用python pandas计算滚动平均时,如果10行中有一行或多行包含一个离群值,我如何拒绝一个窗口?

澄清一下。

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

df.max()

现在我如何拒绝不考虑这10个周期窗口的平均值,如果它包含一个离群值?

最终的目标是得到最大的移动平均线,而不考虑10期窗口的平均值,如果它包含一个离群值。

python outliers moving-average
1个回答
0
投票

你可以只用一行来解决你的问题,就像这样。

_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 的值,这将模仿同样的效果。
© www.soinside.com 2019 - 2024. All rights reserved.