我正在尝试构建滑动窗口以检测数据中的异常值(使用5的窗口)。我想将异常值指定为超过3个标准差的值。谁能建议我该怎么办?
以下是我的数据集的一小部分:
Location Height Length Width
1 150 95 18
2 148 122 102
3 162 127 16
4 155 146 32
5 230 112 96
6 154 108 30
7 160 127 22
8 148 390 36
9 159 142 28
10 422 155 30
答案 0 :(得分:0)
首先找到mean和std:
>>> df.mean()
Height 188.8
Length 152.4
Width 41.0
dtype: float64
>>> df.std()
Height 85.442378
Length 85.454601
Width 31.230327
dtype: float64
然后你可以使用apply条件选择(请注意,我使用了df.std的平方根,因为这里显示了一些结果,这可能不是你想要的,所以只需删除np.sqrt
部分):
>>> df[df > df.mean() + 3*np.sqrt(df.std())]
Height Length Width
Index
1 NaN NaN NaN
2 NaN NaN 102.0
3 NaN NaN NaN
4 NaN NaN NaN
5 230.0 NaN 96.0
6 NaN NaN NaN
7 NaN NaN NaN
8 NaN 390.0 NaN
9 NaN NaN NaN
10 422.0 NaN NaN
>>> df[df < df.mean() - 3*np.sqrt(df.std())]
Height Length Width
Index
1 150.0 95.0 18.0
2 148.0 122.0 NaN
3 NaN NaN 16.0
4 155.0 NaN NaN
5 NaN 112.0 NaN
6 154.0 108.0 NaN
7 160.0 NaN 22.0
8 148.0 NaN NaN
9 159.0 NaN NaN
10 NaN NaN NaN