【问题标题】:How can we reject a window containing an outlier during rolling average using python?我们如何在使用 python 的滚动平均期间拒绝包含异常值的窗口?
【发布时间】:2020-08-17 20:10:16
【问题描述】:

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

澄清:

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

df.max()

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

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

【问题讨论】:

  • 你能解释一下你的想法吗?此外,如果涉及任何代码,最好发布它。
  • 您可以申请this technique of getting the rolling value then filtering,但使用平均值而不是中位数
  • 为了澄清:@Anwarvic df = df['speed'].rolling(10).mean() 现在我如何拒绝/不考虑这 10 个周期窗口的平均值,如果它包含一个异常值?下限为 0,上限为 15 最终目标是在不考虑/考虑 10 周期的窗口的情况下获得最大移动平均线,如果它包含异常值提前谢谢!

标签: python outliers moving-average


【解决方案1】:

您可以像这样只用一行来解决您的问题:

_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 的窗口上应用mean 时,结果将为Nan
  • 最后,我删除了所有 Nan 值,这将模拟相同的效果。

【讨论】:

    猜你喜欢
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 2020-08-13
    • 2020-07-04
    • 2018-10-03
    • 2020-12-19
    相关资源
    最近更新 更多