python-3.x - 从最近一天开始每天重新采样到每年一次?
问题描述
我想将每日系列转换为年度系列,但要基于最新的观察。例如,最新的观察结果是 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
解决方案
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 日会发生什么?)
推荐阅读
- flutter - 从 void 调用 ListView
- laravel - 用于输入数组的 Laravel 验证器
- sql - 需要使下面的 sql 查询从开始(open_date)自动转到第 n 个月(最后支付)
- css - 为什么当我的网页在 WKWebView 中加载时没有加载 CSS 文件,直到我延迟请求
- javascript - 触摸移动设备时如何暂停自动滚动div
- python - 基于逻辑索引提取子数组
- css - 如何在 Rmarkdown 中使用数据表 (DT) 拥有按钮和“显示条目”?
- css - 使用 flex box 在移动设备上将中间列移动到顶部
- php - 在 Laravel 中显示默认的个人资料图片
- flutter - 元素为每个随机获取并从firestore获取数据