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

Pandas重采样OHLC K线时如何获取各指标对应的时间点?

实现方案

你可以通过 Pandas 的命名聚合(Named Aggregation)结合 idxmax()/idxmin() 方法实现需求,核心逻辑是在每个5分钟分组内,匹配对应OHLC值的行索引(也就是采集时间)。
前提:你的 DataFrame 需使用 DatetimeIndex 作为索引,且已按时间升序排序,和你原有 resample 逻辑的前置要求一致。

完整代码示例

df = df.resample("5min").agg(
    # 原有聚合字段
    stock_name=('stock_name', 'first'),
    tr_open=('tr_open', 'first'),
    tr_high=('tr_high', 'max'),
    tr_low=('tr_low', 'min'),
    tr_close=('tr_close', 'last'),
    # 新增对应采集时间字段
    tr_time_open=('tr_open', lambda x: x.index[0]),
    tr_time_high=('tr_high', lambda x: x.idxmax()),
    tr_time_low=('tr_low', lambda x: x.idxmin()),
    tr_time_close=('tr_close', lambda x: x.index[-1])
)

特殊场景处理

  • 如果某个5分钟周期内出现多个相同的最高值/最低值,idxmax()/idxmin() 默认返回第一个出现极值的时间。如果你需要取最后一个出现极值的时间,可以调整对应聚合逻辑:
    # 取最后一个出现最高值的时间
    tr_time_high=('tr_high', lambda x: x[x == x.max()].index[-1]),
    # 取最后一个出现最低值的时间
    tr_time_low=('tr_low', lambda x: x[x == x.min()].index[-1])
    
  • 如果你的采集时间没有作为索引,是单独的tr_time字段,可以调整resample参数和聚合逻辑:
    df = df.resample("5min", on='tr_time').agg(
        stock_name=('stock_name', 'first'),
        tr_open=('tr_open', 'first'),
        tr_high=('tr_high', 'max'),
        tr_low=('tr_low', 'min'),
        tr_close=('tr_close', 'last'),
        tr_time_open=('tr_time', 'first'),
        tr_time_high=('tr_time', lambda x: x[df.loc[x.index, 'tr_high'] == df.loc[x.index, 'tr_high'].max()].iloc[0]),
        tr_time_low=('tr_time', lambda x: x[df.loc[x.index, 'tr_low'] == df.loc[x.index, 'tr_low'].min()].iloc[0]),
        tr_time_close=('tr_time', 'last')
    )
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:54:03