使用Pandas中的窗口进行动态异常值检测

Mih*_*iha 2 python series pandas

我想实现异常值检测,它将使用一个窗口来检查下一个元素是否是异常值.假设我们在pd上使用长度为3的窗口.这样的系列:[0,1,2,3,4].我会在[0,1,2]上计算中位数和疯狂(或平均值和标准值)并检查3是否是异常值.
我实现了一个for循环解决方案,但它确实很慢.

Ami*_*ory 5

假设你开始

s = pd.Series([1, 2, 1, 4, 2000, 2])
Run Code Online (Sandbox Code Playgroud)

然后使用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
Run Code Online (Sandbox Code Playgroud)

它是矢量化的,因此应该比for循环快得多.