重采样分钟数据
我有基于分钟的OHLCV数据,主要是关于开盘区间/第一个小时(东部时间上午9:30到10:30)。我想对这些数据进行重新采样,这样我就能得到一个60分钟的值,然后计算出范围。
当我在数据上调用dataframe.resample()这个函数时,结果却是两行数据,而且第一行是从上午9:00开始的。我希望只得到一行数据,且这行数据是从上午9:30开始的。
注意:初始数据是从9:30开始的。
编辑:添加代码:
# Extract data for regular trading hours (rth) from the 24 hour data set
rth = data.between_time(start_time = '09:30:00', end_time = '16:15:00', include_end = False)
# Extract data for extended trading hours (eth) from the 24 hour data set
eth = data.between_time(start_time = '16:30:00', end_time = '09:30:00', include_end = False)
# Extract data for initial balance (rth) from the 24 hour data set
initial_balance = data.between_time(start_time = '09:30:00', end_time = '10:30:00', include_end = False)
我卡住了,试着按日期分开开盘区间,想要得到初始余额。
conversion = {'Open' : 'first', 'High' : 'max', 'Low' : 'min', 'Close' : 'last', 'Volume' : 'sum'}
sample = data.between_time(start_time = '09:30:00', end_time = '10:30:00', include_end = False)
sample = sample.ix['2007-05-07']
sample.tail()
sample.resample('60Min', how = conversion)
默认情况下,重新采样是从每小时的开始处开始的。我希望它能从数据开始的地方开始。
2 个回答
3
这里的"value"是你想要进行汇总的那一列数据。接下来,我们要把数据框中的日期按秒进行重新采样,并计算平均值,最后再把那些空值的行去掉。
data=[('2014-02-24 16:16:47.204000', 1.391424)
,('2014-02-24 16:18:48.296000', 1.048143)
,('2014-02-24 16:19:52.346000', -0.823974)
,('2014-02-24 16:22:13.665000', -0.689560)
,('2014-02-24 16:24:13.760000', -0.323252)
,('2014-02-24 16:26:15.155000', -1.095331)
,('2014-02-24 16:29:58.235000', -0.185681)]
df=pd.DataFrame(data,columns=['Date','Value'])
df['Date']=pd.to_datetime(df['Date'])
minutes=df.resample('1Min',on='Date').mean().dropna()
print(minutes)
输出结果:
Value
Date
2014-02-24 16:16:00 1.391424
2014-02-24 16:18:00 1.048143
2014-02-24 16:19:00 -0.823974
2014-02-24 16:22:00 -0.689560
2014-02-24 16:24:00 -0.323252
2014-02-24 16:26:00 -1.095331
2014-02-24 16:29:00 -0.185681
39
你可以使用 resample
这个函数里的 base
参数:
sample.resample('60Min', how=conversion, base=30)
从 上面的文档链接来看:
base
:int
,默认值是 0
对于可以整除一天的频率来说,base
是聚合时间段的“起点”。
举个例子,如果频率是‘5分钟’,那么base
的值可以在 0 到 4 之间变化。默认值是 0。