如何在大熊猫中进行日历滞后

时间:2018-11-29 00:39:27

标签: pandas lag

我正在尝试对要分析的时间序列数据进行日历延迟。 •对于x个月的延迟,请返回x个月前的值。 (从5月17日开始的3个月的滞后时间将是2月17日的数据)。

在熊猫中有直接可用的解决方案吗?

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')

此代码无法在1月滞后的3月1日正确返回,理想情况下应为2月1日。

3月31日,30日,29日和28日应为2月28日(均使用1个月的滞后时间)。

1 个答案:

答案 0 :(得分:0)

这是pd.offsets.DateOffset(months=1)。它甚至正确地获得了leap年。它利用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]