我想将每日系列转换为年度系列,但要基于最新观察结果。例如,最新观察值为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
答案 0 :(得分:0)
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
虽然不确定leap日的表现如何,但您的问题尚不清楚(例如,如果今天是2月29日,会发生什么?)