如何用Pandas正确重采样不对齐的股票5分钟数据至30分钟级别?
解决方案
核心错误分析
你把closed='right'和label='right'这两个resample专属参数错误地放到了agg()方法的参数里,导致这两个参数完全没有生效,resample使用了默认的区间划分规则,最终聚合结果和交易软件的区间逻辑不匹配。
交易软件的30分钟K线采用右闭区间规则:
- 标签为
10:00的K线,对应(9:30, 10:00]的时间区间(包含10:00的5分钟数据) - 用区间的结束时间作为K线标签
修正后的代码
将closed='right'和label='right'移到resample()方法中,同时保持原有的聚合规则:
df = df.set_index('Date') # 正确传递resample参数,区间右闭,标签用区间结束时间 df_resampled = df.resample('30T', closed='right', label='right').agg({ 'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last', 'Volume': 'sum' }).dropna()
验证修正结果
运行上述代码后,得到的结果将与交易软件完全一致:
Open High Low Close Volume Date 2024-11-19 10:00:00 11.75 11.96 11.55 11.90 99048200 2024-11-19 10:30:00 11.89 11.90 11.66 11.71 43994600 2024-11-19 11:00:00 11.72 11.75 11.70 11.74 14492400 2024-11-19 11:30:00 11.75 11.76 11.67 11.69 11252500
关键参数说明
closed='right':指定时间区间的右端点是闭合的,例如(9:30,10:00]会包含10:00整的5分钟数据label='right':用区间的右端点作为该K线的时间标签,和交易软件的展示逻辑对齐dropna():自动过滤没有数据的区间(比如9:00-9:30的空区间)
内容的提问来源于stack exchange,提问作者Sun Jar
相关产品推荐
相关产品推荐

