Отфильтровать выбросы в строках DataFrame на основе рекурсивного интервала времени - PullRequest
0 голосов
/ 04 октября 2018

У меня есть следующий 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-сигма (3 * STD, -3 * STD) были удалены.

Я могу сделать это для всего DataFrameтаким образом:

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

Но я бы хотел делать это каждый день.

Обратите внимание, что ds это datetime64[ns] и y a float64.

Кроме того, поскольку моей конечной целью является исключение выбросов из данных, можете ли вы предложить другие жизнеспособные варианты для достижения этой цели?

1 Ответ

0 голосов
/ 04 октября 2018

Попробуйте это:

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