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

如何加速Pandas重采样中idxmax/idxmin列计算及高低点判断?

解决Pandas重采样OHLCV并高效判断高低点出现顺序的问题

核心思路

用resample的向量化聚合替代逐组apply,同时处理空序列避免报错,最后用向量运算生成high_first字段,全程避免低效的逐行循环。

完整代码实现

import pandas as pd
import numpy as np

# 示例数据
data = {
    'datetime': ['2022-01-01 10:00:00', '2022-01-01 10:01:00', '2022-01-01 10:02:00',
                 '2022-01-01 10:03:00', '2022-01-01 10:04:00', '2022-01-01 10:05:00'],
    'open': [10, 11, 12, 10, 10, 11],
    'high': [12, 14, 12, 15, 12, 11],
    'low': [9, 9, 8, 9, 8, 9],
    'close': [11, 12, 10, 11, 11, 10],
    'volume': [100, 200, 150, 300, 250, 180]
}
df = pd.DataFrame(data)

# 1. 预处理:转换datetime类型并设为索引
df['datetime'] = pd.to_datetime(df['datetime'])
df = df.set_index('datetime')

# 2. 定义聚合规则,处理空序列避免报错
agg_rules = {
    'open': 'first',          # 区间第一个开盘价
    'high': ['max', lambda x: x.idxmax() if not x.empty else pd.NaT],  # 区间最高价+对应时间
    'low': ['min', lambda x: x.idxmin() if not x.empty else pd.NaT],   # 区间最低价+对应时间
    'close': 'last',          # 区间最后一个收盘价
    'volume': 'sum'           # 区间成交量总和
}

# 3. 5分钟间隔重采样
resampled = df.resample('5min').agg(agg_rules)

# 4. 扁平化多级列名,方便后续操作
resampled.columns = ['open', 'high', 'high_time', 'low', 'low_time', 'close', 'volume']

# 5. 用向量运算生成high_first(替代低效apply)
# 逻辑:高点时间早于/等于低点时间则为1,否则为0;空分组返回NA
resampled['high_first'] = np.where(
    resampled['high_time'].notna() & resampled['low_time'].notna(),
    (resampled['high_time'] <= resampled['low_time']).astype(int),
    pd.NA
)

# 可选:删除无交易数据的空分组
resampled = resampled.dropna(subset=['open', 'close'])

# 查看结果
print(resampled.reset_index())

关键优化点

  1. 抛弃低效逐组apply:resample.agg是Pandas底层优化的向量化操作,比自定义apply快几个数量级,数据量越大优势越明显。
  2. 解决空序列报错:在聚合高低点时间戳时,用lambda函数判断序列是否为空,为空则返回pd.NaT,直接规避ValueError。
  3. 向量运算生成判断字段:用np.where替代逐行apply,利用Pandas的向量计算能力,进一步提升运行速度。

输出结果

运行代码后得到的结果与你期望的完全一致:

datetimeopenhighhigh_timelowlow_timeclosevolumehigh_first
2022-01-01 10:00:0010152022-01-01 10:03:0082022-01-01 10:02:001110000
2022-01-01 10:05:0011112022-01-01 10:05:0092022-01-01 10:05:00101801

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 09:45:02