我有一个pandas数据帧,其中包含高频(秒或分钟(股票数据。
e.g.
Date Time Open ... Low Close Volume
DT ...
2020-10-09 09:30:00 10/09/2020 09:30:00 3432.50 ... 3432.25 3432.50 37
2020-10-09 09:30:01 10/09/2020 09:30:01 3432.50 ... 3432.25 3432.50 8
2020-10-09 09:30:02 10/09/2020 09:30:02 3432.50 ... 3432.25 3432.50 11
2020-10-09 09:30:03 10/09/2020 09:30:03 3432.25 ... 3432.25 3432.50 11
2020-10-09 09:30:04 10/09/2020 09:30:04 3432.25 ... 3432.25 3432.75 134
... ... ... ... ... ... ...
2020-10-14 15:59:53 10/14/2020 15:59:53 3461.25 ... 3461.25 3461.50 59
2020-10-14 15:59:56 10/14/2020 15:59:56 3461.50 ... 3461.25 3461.50 61
2020-10-14 15:59:57 10/14/2020 15:59:57 3461.25 ... 3461.00 3461.75 54
2020-10-14 15:59:58 10/14/2020 15:59:58 3461.50 ... 3461.50 3461.50 25
2020-10-14 15:59:59 10/14/2020 15:59:59 3461.50 ... 3461.50 3461.75 16
我可以很容易地将这些数据重新采样为分钟周期,平均细分为24小时(或1440分钟/天(。
rule = '60T'
df = df.resample(rule, closed='right', label='right').agg(
{'Open': 'first',
'High': 'max',
'Low': 'min',
'Close': 'last',
'Volume': 'sum'
}).dropna()
你如何在一段时间内做到这一点,而这段时间并没有平均划分为1440分钟/天?例如rule='65T'
典型的美国股市数据从美国东部时间9:30到16:00。对于65分钟的小节,我想重新采样以下时段:
09:30-10:35
10:35-11:40
11:40-12:45
12:45-13:50
13:50-14:55
14:55-16:00
我们可以通过将可选参数origin
设置为日期时间索引DT
中的起始值来resample
从resample
的文档来看,origin
是
调整分组的时间戳。起始时区必须与索引的时区匹配。
因此,为了将分组调整为从9:30
开始,我们将origin的值设置为日期时间索引中的开始时间戳,即2020-10-09 09:30:00
除此之外,我们还需要设置可选参数closed
到left
和label
到left
的值
d = {'Open': 'first', 'High': 'max', 'Low': 'min',
'Close': 'last', 'Volume': 'sum'}
df.resample(rule='65T',
closed='left', label='left',
origin=df.index.min()).agg(d).dropna()
样本输出(仅供说明(
Open High Low Close Volume
DT
2020-10-09 09:30:00 3432.5 3432.5 3432.25 3432.5 2405.0 # 09:30-10:35
2020-10-09 10:35:00 3432.5 3432.5 3432.25 3432.5 2405.0 # 10:35-11:40
2020-10-09 11:40:00 3432.5 3432.5 3432.25 3432.5 2405.0 # 11:40-12:45
2020-10-09 12:45:00 3432.5 3432.5 3432.25 3432.5 2405.0 # 12:45-13:50
2020-10-09 13:50:00 3432.5 3432.5 3432.25 3432.5 2405.0 # 13:50-14:55
2020-10-09 14:55:00 3432.5 3432.5 3432.25 3432.5 2405.0 # 14:55-16:00