如何将5分钟OHLC数据转换为每小时15分起始的小时级数据?
调整Pandas重采样实现15分起始的小时级OHLC转换
要将5分钟间隔的OHLC数据转换为9:15-10:15、10:15-11:15这类以每小时15分为起始的小时级数据,只需在原代码的resample()方法中添加origin参数,指定重采样窗口的起始基准即可。
修改后的完整代码
import pandas as pd df = pd.read_csv('data.csv') df['Datetime'] = pd.to_datetime(df['Datetime']) df.set_index('Datetime', inplace=True) # 动态计算重采样起始基准:取数据中最早时间所在小时的15分时刻 origin_time = df.index.min().floor('H') + pd.Timedelta(minutes=15) # 按小时重采样,指定起始基准,保持原聚合规则不变 hourly_data = df.resample('H', origin=origin_time).agg({ 'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last', 'Volume': 'sum' })
关键说明
origin参数用于定义重采样窗口的起始时间基准:通过df.index.min().floor('H')获取数据中最早时间所在的整点,再加15分钟,确保所有小时窗口从小时+15分开始。- 聚合规则与原代码一致:每个窗口取第一个
Open、最高High、最低Low、最后一个Close,并对Volume求和。 - 如果你的数据每天固定从9:15开始,也可以直接写
origin='09:15'替代动态计算的origin_time,但动态计算方式更适配不同日期的起始场景。
验证示例数据
以你提供的data.csv为例,第一个重采样窗口2015-02-03 09:15:00+05:30会包含9:15到10:10的所有5分钟数据,计算结果为:
- Open: 200.4(9:15的开盘价)
- High: 202.85(10:10的最高价)
- Low: 199.1(9:15的最低价)
- Close: 202.8(10:10的收盘价)
- Volume: 所有对应时段的成交量总和
内容的提问来源于stack exchange,提问作者pkj
相关产品推荐
相关产品推荐

