我想实现异常值检测,它将使用一个窗口来检查下一个元素是否是异常值。假设我们在pd上使用长度为3的窗口。这样的系列:[0,1,2,3,4]。我会在[0,1,2]上计算中位数和疯狂(或平均值和标准值)并检查3是否是异常值 我实现了一个for循环解决方案,但它确实很慢。
答案 0 :(得分:5)
假设您从
开始s = pd.Series([1, 2, 1, 4, 2000, 2])
然后使用rolling
,以下将显示第5个元素距离长度为3的窗口中位数为200:
(s - s.rolling(3).median()).abs() > 200
0 False
1 False
2 False
3 False
4 True
5 False
dtype: bool
它是矢量化的,因此应该比for
循环快得多。