【发布时间】:2014-11-12 03:00:32
【问题描述】:
我正在处理期货数据,即当天在 00:00:00 之前开始。考虑到日期偏移量,我需要将 1 分钟数据重新采样为 1 小时数据。我们来看一个例子:
df1 - 1分钟数据
Open High Low Close
2005-09-06 17:27:00 1234.75 1234.75 1234.75 1234.75
2005-09-06 17:28:00 1234.75 1234.75 1234.75 1234.75
2005-09-06 17:29:00 1234.75 1234.75 1234.75 1234.75
2005-09-06 17:30:00 1234.75 1234.75 1234.50 1234.50
2005-09-06 18:01:00 1234.50 1234.50 1234.25 1234.50
2005-09-06 18:02:00 1234.50 1234.50 1234.50 1234.50
2005-09-06 18:03:00 1234.50 1234.50 1234.50 1234.50
2005-09-06 18:04:00 1234.50 1234.50 1234.50 1234.50
2005-09-06 18:05:00 1234.50 1234.50 1234.25 1234.25
这就是常规重采样会发生的情况:
conversion = {'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last'}
In [77]: normal_resample = df1.resample(rule='60Min', how=conversion)
In [78]: normal_resample
Out[79]:
Open High Low Close
2005-09-06 17:00:00 1234.75 1234.75 1234.50 1234.50
2005-09-06 18:00:00 1234.50 1234.50 1234.25 1234.25
这是偏移量的所需输出:
conversion = {'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last'}
In [77]: offset_resample = df1.resample(rule='60Min', how=conversion) + offset:18:00
In [78]: offset_resample
Out[79]:
Open High Low Close
2005-09-06 17:00:00 1234.75 1234.75 1234.50 1234.50
2005-09-07 18:00:00 1234.50 1234.50 1234.25 1234.25
注意我想要的是如何指定新的一天从 '18:00:00' 开始,而不是午夜。
我做了什么:我有一个包含偏移量的公式,对每日数据进行重采样,但我不知道如何使其适应日内重采样。
def resample_day(df):
df.index = pd.DatetimeIndex(df.index)
df = df.between_time('18:00', '16:00', include_start=True, include_end=True)
proxy = df.index + pd.DateOffset(hours=6) # This is the piece that does the trick
result = df.groupby(proxy.date).agg(
{'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last'})
result = result.reindex(columns=['Open', 'High', 'Low', 'Close'])
return result
另外,suggested here 是什么,至少对我来说不起作用。
感谢您的意见。
【问题讨论】:
-
+1 重采样技巧,非常棒!
标签: python numpy pandas time-series