Удалить столбцы из кадра данных на основе месяца? - PullRequest
0 голосов
/ 25 марта 2020

У меня есть df с двумя столбцами - формат 'PORTFOLIO' и 'DATE' (datetime.date (2018, 9, 19)). Я пытаюсь удалить строки с текущим месяцем и прошлым месяцем, т.е. если текущий месяц равен March, данные за январь и февраль должны быть удалены. Аналогично, если текущий месяц - Feb 2020, данные «Янв 2020» и «Де c 2019» должны быть удалены. Пример: df

                          PORTFOLIO  DATE
                        0   A       2018-09-19
                        1   B       2018-03-09
                        2   C       2019-03-09
                        3   D       2020-01-02
                        4   E       2020-01-17
                        5   F       2020-02-09
                        6   G       2020-03-15
                        7   H       2019-10-05
                        8   I       2018-03-09
                        9   J       2020-01-21
                        10  K       2019-03-08
                        11  L       2019-02-12
                        12  M       2020-03-01
                        13  N       2020-02-16

Мой результирующий df:

                          PORTFOLIO  DATE
                        0   A       2018-09-19
                        1   B       2018-03-09
                        2   C       2019-03-09
                        3   D       2020-01-02
                        4   E       2020-01-17
                        5   H       2019-10-05
                        6   I       2018-03-09
                        7   J       2020-01-21
                        8   K       2019-03-08
                        9   L       2019-02-12

1 Ответ

2 голосов
/ 25 марта 2020

Я думаю, что вам нужно работать с периодами месяца, созданными Timestamp.to_period на сегодня period, значения столбцов конвертируются аналогично Series.dt.to_period и проверять предыдущие 2 периода с помощью вычитания 1 и 2 в Series.isin, поэтому возможна фильтрация по инвертированной маске с ~ и boolean indexing:

df['DATE'] = pd.to_datetime(df['DATE'])

now = pd.to_datetime('now').to_period('m')
print (now)
2020-03

df = df[~df['DATE'].dt.to_period('m').isin([now, now-1])]

Аналогичное решение, если требуется некоторый диапазон с Series.between, по умолчанию включительно, поэтому также фильтруйте значения now-1 и now:

df = df[~df['DATE'].dt.to_period('m').between(now-1, now)]
print (df)
   PORTFOLIO       DATE
0          A 2018-09-19
1          B 2018-03-09
2          C 2019-03-09
3          D 2020-01-02
4          E 2020-01-17
7          H 2019-10-05
8          I 2018-03-09
9          J 2020-01-21
10         K 2019-03-08
11         L 2019-02-12
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...