pandas - 如何在熊猫中进行日历天滞后
问题描述
我正在尝试对我要分析的时间序列数据进行日历滞后。• 对于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 个月的滞后)。
解决方案
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]
推荐阅读
- python - Pandas 如何根据所有行的值、应用于整个数据框的特定列值向数据框添加新列
- python - 如何根据用户对下拉列表的响应定义使用哪个文件?
- reactjs - 我应该在哪里调用 setintreval 反应
- c# - PostAsync 语句导致测试完成不确定
- java - Hibernate Criteria - 投影中的多种实体类型
- c# - Azure Web 应用程序和 Azure VM 上的 Windows 窗体应用程序之间的通信
- python - 这是 Python 中通常使用的/一种好的做法吗?
- python - 为什么站点匹配查询不存在?
- javascript - 如何在完整日历中选择全年的工作日或周末?
- jquery - Rails 设置 cookie 作为响应,但标头会丢失