重采样分钟数据

37 投票
2 回答
78326 浏览
提问于 2025-04-17 15:47

我有基于分钟的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。

撰写回答