每小时重新采样具有一定开始时间的时间序列

时间:2012-09-25 08:38:49

标签: python pandas

我想从某个小时开始每天(恰好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(或大熊猫)的方式获得希望的结果呢?

版本:

  • python 2.7.3
  • pandas 0.9.0rc1(但在0.8.1中也不起作用)
  • numpy 1.6.1

3 个答案:

答案 0 :(得分:24)

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

答案 1 :(得分:2)

2020更新:针对数据帧

使用doc中提到的base关键字:

base description of documentation

代码示例:

df.resample(pd.Timedelta('24 hours'), # or '24H'
 base=17 # <--  ADD THIS
).sum() 

答案 2 :(得分:2)

2021 年更新:base 自 1.1.0 版起已弃用:您应该使用的新参数是“offset”或“origin”。

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

1.1.0 版的新功能

origin{‘epoch’, ‘start’, ‘start_day’},时间戳或 str,默认‘start_day’ 调整分组的时间戳。原始时区必须与索引的时区匹配。如果不使用时间戳,也支持这些值:

  • ‘纪元’:起源于 1970-01-01
  • ‘start’:origin 是时间序列的第一个值
  • ‘start_day’:原点是时间序列午夜的第一天