Временные ряды панд: удаление строк по идентификатору - PullRequest
0 голосов
/ 09 июня 2019

У меня есть кадр данных Pandas в форме:

Date       ID     Temp
2019/03/27 1       23
2019/04/27 2       32
2019/04/27 1       42
2019/04/28 1       41
2019/01/27 2       33
2019/08/27 2       23

Что мне нужно сделать?

Выберите строки, которым не менее 30 дней от их последнего измерения длякаждый идентификатор.

т.е. самая поздняя дата для Id = 2 равна 2019/08/27, поэтому для ID =2 мне нужно выбрать строки, которые старше на 30 дней.Таким образом, строка с 2019/08/27 для идентификатора = 2 сама будет удалена.

Аналогично, самая поздняя дата для идентификатора = 1 будет 2019/04/28.Это означает, что я могу выбрать строки для ID =1, только если дата меньше 2019/03/28 (на 30 дней старше).Итак, строка 2019/04/27 с ID=1 будет удалена.

Как это сделать в Пандах.Любая помощь с благодарностью.

Спасибо.

Окончательный кадр данных будет:

Date       ID     Temp
2019/03/27 1       23
2019/04/27 2       32
2019/01/27 2       33

1 Ответ

5 голосов
/ 09 июня 2019

В вашем случае используйте groupby + transform('last') и отфильтруйте оригинал df

Yourdf=df[df.Date<df.groupby('ID').Date.transform('last')-pd.Timedelta('30 days')].copy()
        Date  ID  Temp
0 2019-03-27   1    23
1 2019-04-27   2    32
4 2019-01-27   2    33

Обратите внимание, я добавляю .copy в конце, чтобы предотвратить ошибку копирования настроек.

...