У меня есть полчаса df фрейма данных, из которого я хочу удалить выбросы.
date = ['2015-02-03 23:00:00','2015-02-03 23:30:00','2015-02-04 00:00:00','2015-02-04 00:30:00']
value_column = [33.24 , 500 , 34.39 , 34.49 ]
df = pd.DataFrame({'value column':value_column})
df.index = pd.to_datetime(df['index'],format='%Y-%m-%d %H:%M')
df.drop(['index'],axis=1,inplace=True)
print(df.head())
value column
index
2015-02-03 23:00:00 33.24
2015-02-03 23:30:00 500
2015-02-04 00:00:00 34.39
2015-02-04 00:30:00 34.49
Я хочу удалить выбросы на основе разницы значений от одного часа к другому. Я хотел бы заменить значения выбросов на NaN, если абсолютная разница от одного часа к другому превышает заданный порог. Как я могу это сделать эффективно?
Я знаю, что могу получить разницу фрейма данных со строкой ниже, однако я не знаю, как заменить значения на nan в определенных индексах, где разница выше заданный порог. Есть идеи, как это сделать эффективно? (Предположим, например, что порог равен 100)
df = df.diff()
Я пробовал следующее, он не вызывает ошибок, но не работает:
df["value column"]=df["value column"].mask(df["value column"].diff().abs() > 100, np.nan)
Ожидаемые результаты:
value column
index
2015-02-03 23:00:00 33.24
2015-02-03 23:30:00 NaN
2015-02-04 00:00:00 34.39
2015-02-04 00:30:00 34.49