Как сделать отставание календарного дня в pandas

Я пытаюсь сделать отставание календаря от данных временного ряда, которые я пытаюсь проанализировать. • Для задержек x месяцев вернуть значение x количество месяцев назад. (отставание на 3 месяца от 17 мая соответствует данным на 17 февраля).

Есть ли какое-либо решение, доступное непосредственно в pandas.

df_list = pd.date_range(start=min_date, end=max_date,freq='D').to_frame(index=False)
df_list.columns = ['name']
df_list.set_index('name',inplace = True)
df = df_list.reindex(df_list.index - pd.to_timedelta(30, unit='d'), 
method='nearest')

Этот код не может правильно вернуться для 01 марта с задержкой в ​​1 месяц, которая в идеале должна быть 1 февраля.

А 31, 30, 29, 28 марта должны быть 28 февраля (все с отставанием в 1 месяц).


person G. srk    schedule 29.11.2018    source источник


Ответы (1)


Это pd.offsets.DateOffset(months=1). Он даже получает правильные високосные годы. Он использует логику dateutil.relavitedelta, которая выполняет вычитание даты по мере необходимости.

import pandas as pd
dates = pd.to_datetime(['2018-03-01', '2018-03-31', '2018-03-30', 
                        '2018-03-29', '2018-03-28', '2016-03-31'])
df = pd.DataFrame({'dates': dates})
#       dates
#0 2018-03-01
#1 2018-03-31
#2 2018-03-30
#3 2018-03-29
#4 2018-03-28
#5 2016-03-31

df.dates - pd.offsets.DateOffset(months=1)
#0   2018-02-01
#1   2018-02-28
#2   2018-02-28
#3   2018-02-28
#4   2018-02-28
#5   2016-02-29
#Name: dates, dtype: datetime64[ns]
person ALollz    schedule 29.11.2018