You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中无未来偏差重采样OHLC DataFrame并优化性能

需求说明

我有一个以秒级时间戳为索引的Pandas DataFrame,包含金融工具价格相关的Open、High、Low、Close列。
需要实现以下目标:

  • 将DataFrame按15分钟(或任意指定频率)重采样,但绝对不能引入未来数据
  • 保留原秒级频率的DataFrame结构,同时为每一行新增四列,实时展示当前正在形成的15分钟K线的OHLC值(即Open_15m、High_15m、Low_15m、Close_15m)
  • 15分钟K线的起始时间严格限定在hh:00:00、hh:15:00、hh:30:00、hh:45:00,例如09:00:00-09:15:00期间计算该时段的滚动OHLC,到09:15:00时重置并开始下一个15分钟周期的计算

我已经写出逻辑正确的代码,但处理数百万行的大数据时速度极慢,需要用NumPy、Numba等工具做性能优化。


原实现代码
# 找到最近的15分钟起始时间(向下取整)
def nearest_quarter_hour(timestamp):
    return timestamp.floor('15T')

# 为每个时间戳标记对应的15分钟起始时间
df['15_min_floor'] = df.index.map(nearest_quarter_hour)

# 按15分钟起始时间分组,计算滚动OHLC
rolling_df = df.groupby('15_min_floor').rolling(window='15T').agg({
    'Open': lambda x: x.iloc[0],  # 窗口内第一个值
    'High': 'max',
    'Low': 'min',
    'Close': lambda x: x.iloc[-1]  # 窗口内最后一个值
}).reset_index(level=0, drop=True)

# 重命名滚动计算后的列
rolling_df.columns = [f'{col}_15' for col in rolling_df.columns]

# 合并到原DataFrame
result_df = pd.concat([df, rolling_df], axis=1)

内容的提问来源于stack exchange,提问作者MilTom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 14:00:00