2

我有以下 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())]

但我想每天都这样做。

请注意,这ds是 adatetime64[ns]ya float64

此外,由于我的最终目标是从数据中排除异常值,您能否提出其他可行的选择来实现这一目标?

4

1 回答 1

0

尝试这个:

g = df.groupby(df.index.floor('D'))['y']
df[(np.abs(df.y - g.transform('mean')) <= (3*g.transform('std')))]
于 2018-10-04T14:39:09.937 回答