如何按印度证券交易所交易时段将Pandas 5分钟股票数据聚合为10分钟K线
5分钟行情聚合为10分钟K线的正确实现方案
问题根因
你原来使用pd.Grouper(freq='10T')的方案是基于自然时间窗口分组,印度交易所收盘到次日开盘之间间隔远大于10分钟,因此前一交易日最后1条5分钟数据和下一交易日第1条数据会被划分到不同的自然时间窗口,无法合并。同时自然时间分组也无法兼容节假日、停盘带来的时间缺口场景。
解决思路
你需要的是按实际交易时序分组,每2条连续的5分钟数据合并为1条10分钟K线,完全忽略非交易时间的间隔。实现逻辑如下:
- 先按标的代码和交易时间对数据排序,保证时序正确
- 每个标的内部按行号每2行划分为一组,跨交易日的两条连续数据会被自动分到同一组
- 对每组按OHLCV的规则聚合即可
实现代码
import pandas as pd # 第一步:按标的和交易时间升序排序,必须先做排序保证时序正确 df = df.sort_values(['script_id', 'date_time'], ignore_index=True) # 第二步:按交易时序每2条一组聚合 df_f = df.groupby([ 'script_id', # 每个标的内部生成连续行号,每2行归为同一组 df.groupby('script_id').cumcount() // 2 ]).agg( date_time = ('date_time', 'first'), # 取组内第一条的时间作为10分钟K的时间,符合你给出的预期 open = ('open', 'first'), high = ('high', 'max'), low = ('low', 'min'), close = ('close', 'last'), volume = ('volume', 'sum') ).reset_index(drop=True)
效果验证
该方案会自动把前一交易日最后1条和下一交易日第1条5分钟数据分到同一组:
- 分组后
date_time取前一交易日最后一条的时间,符合你预期的2019-02-04 15:25:00 - OHLCV的聚合规则完全匹配K线合成逻辑,计算结果和你给出的预期值完全一致
- 完全兼容跨节假日、停盘等时间缺口场景,只要是连续的两条交易记录就会正常合并
如果需要将10分钟K的时间标记为组内最后一条的时间,只需要把date_time的聚合函数改为'last'即可。
内容的提问来源于stack exchange,提问作者Kabomi
相关产品推荐
相关产品推荐

