如何按5、10、15分钟时段分组分钟级金融时间戳记录?
解决分钟级金融数据按5/10/15分钟时段分组的问题
这个需求在量化交易和金融数据分析里太常见了,我通常用Python的pandas库来处理这类时间序列的重采样任务,下面给你详细的实现步骤和代码:
步骤1:数据准备与预处理
首先得把你的数据加载到pandas DataFrame里,并且确保时间列dt是datetime类型,另外注意你的原始数据时间是倒序的(从15:30到15:26递减),处理前一定要先按时间升序排序,否则重采样会出错。
假设你的数据可以直接构造或者从文件读取,这里用示例数据演示:
import pandas as pd # 构造和你格式一致的示例数据 data = [ ["2018-05-04 15:30:00", 171.0000, 171.3000, 170.9000, 171.0000, 42817], ["2018-05-04 15:29:00", 170.8000, 171.0000, 170.8000, 170.9500, 32801], ["2018-05-04 15:28:00", 170.8500, 171.0000, 170.8000, 170.8000, 22991], ["2018-05-04 15:27:00", 170.8500, 170.8500, 170.7500, 170.8000, 40283], ["2018-05-04 15:26:00", 170.7000, 170.8500, 170.7000, 170.8500, 18765] ] df = pd.DataFrame(data, columns=["dt", "open", "high", "low", "close", "vol"]) # 转换时间列为datetime类型 df["dt"] = pd.to_datetime(df["dt"]) # 按时间升序排序并设为索引(原始数据倒序,这一步必须做) df = df.sort_values("dt").set_index("dt")
步骤2:按指定时段分组(重采样)
pandas的resample方法专门用来处理时间序列的分组聚合,我们需要为每个字段定义符合K线逻辑的聚合规则:
open:取时段内第一条记录的开盘价high:取时段内的最高价low:取时段内的最低价close:取时段内最后一条记录的收盘价vol:累加时段内的成交量
5分钟分组示例
# 5分钟重采样 df_5min = df.resample("5T").agg({ "open": "first", "high": "max", "low": "min", "close": "last", "vol": "sum" }).dropna() # 剔除无数据的空时段 print("5分钟分组结果:") print(df_5min)
10分钟分组示例
# 10分钟重采样 df_10min = df.resample("10T").agg({ "open": "first", "high": "max", "low": "min", "close": "last", "vol": "sum" }).dropna() print("\n10分钟分组结果:") print(df_10min)
15分钟分组示例
# 15分钟重采样 df_15min = df.resample("15T").agg({ "open": "first", "high": "max", "low": "min", "close": "last", "vol": "sum" }).dropna() print("\n15分钟分组结果:") print(df_15min)
关键细节说明
- 时间频率参数:
"5T"代表5分钟,"10T"是10分钟,"15T"是15分钟,pandas还支持"H"(小时)、"D"(天)等多种时间频率缩写。 - 聚合规则的必要性:严格按照K线逻辑聚合才能保证分组后的数据有实际分析价值,不能随便用均值之类的规则。
- 排序的重要性:如果原始数据时间乱序或倒序,
resample会无法正确识别时段边界,所以排序和设索引是前置必要操作。
内容的提问来源于stack exchange,提问作者Aviartz
相关产品推荐
相关产品推荐

