首页 > 解决方案 > 从最近一天开始每天重新采样到每年一次?

问题描述

我想将每日系列转换为年度系列,但要基于最新的观察。例如,最新的观察结果是 2020-06-06,所以我想从那里转换为年度频率(...2018-06-06、2019-06-06、2020-06-06)。当我使用重新采样时,它会自动将年度系列设置为每年的最后一个日历日。有没有更简单的方法可以做到这一点,还是我需要做进一步的索引才能得到这些日期?

import pandas as pd
import numpy as np
from datetime import date

today = date.today()
dates = pd.date_range('2010-01-01', today, freq='D')
np.random.seed(100)
 data = np.random.randn(len(dates))
 ts = pd.Series(data=data, index=dates, name='Series')
ts_year = ts.resample('A').ffill()
2010-12-31    0.790428
2011-12-31    1.518362
2012-12-31    0.150378
2013-12-31    0.570817
2014-12-31    1.481655
2015-12-31   -1.582277
2016-12-31    0.443544
2017-12-31   -1.296233
2018-12-31    0.479207
2019-12-31   -1.484178
2020-12-31    0.044787
Freq: A-DEC, Name: Series, dtype: float64

标签: python-3.xpandasdate

解决方案


pd.resample需要一个偏移量参数,减去到今年年底的剩余天数。就像是:

ts.resample('A', loffset=today - date(today.year, 12, 31)).ffill()

2010-06-06    0.790428
2011-06-06    1.518362
2012-06-06    0.150378
2013-06-06    0.570817
2014-06-06    1.481655
2015-06-06   -1.582277
2016-06-06    0.443544
2017-06-06   -1.296233
2018-06-06    0.479207
2019-06-06   -1.484178
2020-06-06    0.044787
Name: Series, dtype: float64

虽然不确定它在闰日的表现如何,但从你的问题中不清楚它应该如何(即如果今天是 2 月 29 日会发生什么?)


推荐阅读