Я пытаюсь сделать что-то очень простое, у меня есть DatetimeIndex в наборе данных, и я хочу сохранить последние 12 месяцев только на основе самой последней записи.
Мои данные: AU, содержит один запись по месяцу, и дата всегда является первым днем месяца.
Теперь, когда я делаю это:
mask = au.index >= max(au.index) - pd.to_timedelta(12, unit = 'M')
pd.unique(au[mask].index)
Out[5]:
array(['2018-11-01T00:00:00.000000000', '2018-12-01T00:00:00.000000000',
'2019-11-01T00:00:00.000000000', '2019-10-01T00:00:00.000000000',
'2019-09-01T00:00:00.000000000', '2019-08-01T00:00:00.000000000',
'2019-07-01T00:00:00.000000000', '2019-06-01T00:00:00.000000000',
'2019-01-01T00:00:00.000000000', '2019-05-01T00:00:00.000000000',
'2019-04-01T00:00:00.000000000', '2019-03-01T00:00:00.000000000',
'2019-02-01T00:00:00.000000000'], dtype='datetime64[ns]')
Я получаю мой последний месяц и последние двенадцать месяцев, так что 13 месяцев в целом. Это нормально, я подумал, что это был просто вопрос, включать или не включать расчет за последний месяц.
Поэтому я изменяю свой код на:
mask = au.index >= max(au.index) - pd.to_timedelta(11, unit = 'M')
pd.unique(au[mask].index)
Out[9]:
array(['2019-11-01T00:00:00.000000000', '2019-10-01T00:00:00.000000000',
'2019-09-01T00:00:00.000000000', '2019-08-01T00:00:00.000000000',
'2019-07-01T00:00:00.000000000', '2019-06-01T00:00:00.000000000',
'2019-01-01T00:00:00.000000000', '2019-05-01T00:00:00.000000000',
'2019-04-01T00:00:00.000000000', '2019-03-01T00:00:00.000000000',
'2019-02-01T00:00:00.000000000'], dtype='datetime64[ns]')
Теперь я получаю только 11 месяцев назад вместо 12, как и ожидалось.
Кто-нибудь знает почему?
Спасибо
PS: Я понимаю, что, вероятно, был бы способ сделать это с использованием относительной дельты. Но мне любопытно понять поведение pandas.