首页 > 解决方案 > 如何在熊猫中进行日历天滞后

问题描述

我正在尝试对我要分析的时间序列数据进行日历滞后。• 对于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')

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

3 月 31 日、30 日、29 日、28 日应该是 2 月 28 日(都使用 1 个月的滞后)。

标签: pandaslag

解决方案


This is pd.offsets.DateOffset(months=1). It even gets leap years correct. It makes use of dateutil.relavitedelta logic, which does the date subtraction as you need.

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]

推荐阅读