根据递归时间间隔过滤DataFrame行中的异常值

时间:2018-10-04 13:59:13

标签: python pandas datetime64

我有以下DataFrame df

ds                  y
2018-10-01 00:00    1.23
2018-10-01 01:00    2.21
2018-10-01 02:00    6.40
...                 ...
2018-10-02 00:00    3.21
2018-10-02 01:00    3.42
2018-10-03 02:00    2.99
...                 ...

这意味着我每小时每小时有一个y值。 我想过滤行,以便删除不在6-sigma间隔内的值(3 * std,-3 * std)。

我可以这样对整个DataFrame进行此操作:

df = df[np.abs(df.y-df.y.mean()) <= (3*df.y.std())]

但是我想每天这样做。

请注意,dsdatetime64[ns]yfloat64

此外,由于我的最终目标是从数据中排除异常值,因此您可以建议其他可行的方法来实现此目的吗?

1 个答案:

答案 0 :(得分:0)

尝试一下:

g = df.groupby(df.index.floor('D'))['y']
df[(np.abs(df.y - g.transform('mean')) <= (3*g.transform('std')))]