20

我想从某个小时开始以每天(正好 24 小时)的频率重新采样 TimeSeries。

像:

index = date_range(datetime(2012,1,1,17), freq='H', periods=60)

ts = Series(data=[1]*60, index=index)

ts.resample(rule='D', how='sum', closed='left', label='left')

结果我得到:

2012-01-01  7
2012-01-02 24
2012-01-03 24
2012-01-04  5
Freq: D

我希望的结果:

2012-01-01 17:00:00 24
2012-01-02 17:00:00 24
2012-01-03 17:00:00 12
Freq: D

几周前,你可以传递'24H'给这个freq论点,它工作得很好。但现在它结合'24H''1D'.

我是否使用了'24H'现在已修复的错误?我怎样才能以高效和 Pythonic(或 Pandas)的方式获得预期的结果?

版本:

  • 蟒蛇2.7.3
  • pandas 0.9.0rc1(但也不适用于 0.8.1)
  • numpy 1.6.1
4

3 回答 3

29

Resample有一个base涵盖这种情况的论点:

ts.resample(rule='24H', closed='left', label='left', base=17).sum()

输出:

2012-01-01 17:00:00    24
2012-01-02 17:00:00    24
2012-01-03 17:00:00    12
Freq: 24H
于 2012-09-25T09:56:24.167 回答
3

2021 更新:base自 1.1.0 版起已弃用:您应该使用的新参数是“偏移”或“原点”。

df.resample('24H',
 origin=datetime(2012,1,1,17) # <--  ADD THIS
).sum() 

1.1.0 版中的新功能

origin {'epoch', 'start', 'start_day'}, Timestamp or str, default 'start_day' 调整分组的时间戳。原始时区必须与索引的时区匹配。如果不使用时间戳,则还支持以下值:

  • “时代”:起源是 1970-01-01
  • 'start':原点是时间序列的第一个值
  • 'start_day':原点是时间序列午夜的第一天
于 2021-03-22T13:27:28.280 回答
2

2020 年更新:对于数据框

使用文档base中提到的关键字:

文档的基本描述

代码示例:

df.resample(pd.Timedelta('24 hours'), # or '24H'
 base=17 # <--  ADD THIS
).sum() 
于 2020-03-24T10:24:29.123 回答