我想从某个小时开始每天(恰好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(或大熊猫)的方式获得希望的结果呢?
版本:
答案 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
关键字:
代码示例:
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’ 调整分组的时间戳。原始时区必须与索引的时区匹配。如果不使用时间戳,也支持这些值: