Выявление выкатных выпадающих значений и их замена на обратную засыпку в данных временных рядов - Pandas - PullRequest
0 голосов
/ 24 февраля 2020

Я строю свои данные и получаю локальные выбросы, как на рисунке ниже enter image description here

Я хочу заменить эти выбросы на bfill, исходя из скользящего среднего значения за 120 дней а не удалять эти выбросы вместо этого.

Моя проблема в том, что я не могу использовать среднее значение, поскольку значение постоянно увеличивается со временем, а выбросы, например, в 2013 году, являются нормальными значениями в 2018 году.

Я видел такие решения, как this , но они не дают руководства относительно того, как заменить эти выбросы (и я не хочу полностью их удалять)

1 Ответ

1 голос
/ 24 февраля 2020

Ну, ответ, который вы связали, поможет вам в этом. Выберите число скользящих стандартных отклонений за пределами скользящего среднего значения для периода, который имеет смысл, затем пометьте их как NaN и заполните их примерно так:

import pandas as pd
import numpy as np


df = pd.DataFrame({'Data':np.random.normal(size=200)})
df.iloc[[10, 55, 80]] = 40. 
r = df.rolling(window=20)
mps_up, mps_low = r.mean() + 3 * r.std(), r.mean()  -  3 * r.std()
df.loc[~df['Data'].between(mps_low.Data, mps_up.Data), 'Data'] = np.NaN
df['Data'] = df['Data'].fillna(method='bfill')

Это должно сработать!

...