Засыпать ошибочные временные значения в кадре данных pandas, если предыдущий шаг по времени был ограничен - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть временные данные с столбцами ID, Time и Value.Теперь я знаю, что значение никогда не может опуститься ниже, скажем, на 90, и любое значение, меньшее, чем это, является ошибочным.Итак, как бы я засыпал это ошибочное значение (с небольшим дрожанием) при условии, что предыдущее значение для этого идентификатора было записано не более 2 часов назад?

В основном:

  • Найти значения<90 </li>
  • Если предыдущее значение для ID было записано менее 2 часов назад: Обратная засыпка
  • Иначе удалить строку

1 Ответ

0 голосов
/ 25 апреля 2018

сначала отбросьте значения <= 90 и которые имеют предыдущее значение> 2 часа

установите менее чем 90 секунд в течение 2 часов на nan, заполните эти

некоторые фиктивные данные

time = pd.Series(np.random.randint(15e17, 15e17 + 1e16, 1000), 
dtype='datetime64[ns]').sort_values()
values = np.random.normal(100, 5, 1000)
ids = np.random.choice(['a', 'b'], 1000)
df = pd.DataFrame({'id' :ids, 'time' : time, 'value' : values}, index=np.arange(1000))

метод, применяемый при группировке по идентификатору

def replace_data(df):
    df['time_to_prev'] = df.time - df.time.shift() 
    df = df.loc[(df.value > 90) | (df.time_to_prev < pd.Timedelta(hours=2))]
    df.loc[df.value < 90, 'value'] = np.NaN
    df.value = df.value.ffill()
    return df[['id', 'time', 'value']]

df.groupby(['id']).apply(replace_data).reset_index(drop=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...