Pandas时间序列重采样如何调整分箱匹配数据集起止时间生成4小时K线
问题原因
你遇到的边界异常问题,本质是全局4小时重采样默认对齐自然时间,使用origin='end'从序列末尾倒推切分时,没有和每日09:30的交易起始时间对齐,才会出现07:59这类非交易时段的分箱边界。
兼容Pandas 1.3.0的实现方案
确认你的DataFrame时间索引为datetime64类型且按时间正序排序后,使用「按交易日分组+组内重采样」的逻辑,保证分箱从每日09:30开始对齐:
import pandas as pd # 原有聚合规则保持不变 agg_dict = {'open': 'first','high': 'max','low': 'min','cls': 'last','vol': 'sum'} # 预处理:保证索引格式正确、按时间正序排列 fullRth.index = pd.to_datetime(fullRth.index) fullRth = fullRth.sort_index() # 按自然日分组,组内从当日交易起始时间开始重采样 data_4hour = fullRth.groupby(pd.Grouper(freq='D')).apply( lambda df: df.resample('4H', label='left', origin='start').agg(agg_dict) ).droplevel(0).dropna().round(2).sort_index(ascending=False)
如果需要匹配你示例中的11:59分左边界格式,只需要在重采样完成后对索引做1分钟偏移即可:
data_4hour.index = data_4hour.index - pd.Timedelta(minutes=1)
说明
- 该方案不会生成跨交易日的分箱,所有分箱都落在09:30-16:00的交易时段内
- 完全适配Python 3.9.6、Numpy 1.21.1、Pandas 1.3.0的运行环境,无需升级依赖
内容的提问来源于stack exchange,提问作者Hank Gordon
相关产品推荐
相关产品推荐

