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

如何用Pandas高效实现稀疏交易数据的OHLC重采样

稀疏交易数据的OHLC重采样优化方案

我有稀疏的交易数据,想要按股票市场的OHLC(开盘/最高/最低/收盘)格式重采样以实现每日价格汇总,但现有resample结果存在两个问题:

  • 当日开盘价未衔接前一日收盘价
  • 无交易日期的OHLC值为NaN,不符合“价格未变动”的逻辑

需要满足:

  1. 当日开盘价始终设为前一日收盘价
  2. 无交易日期的所有OHLC值沿用前一日收盘价

希望用Pandas的高效方法实现,避免手动循环处理大数据量时的性能问题。


示例基础代码与问题结果

原始交易数据代码

import pandas as pd

# 非规则间隔的交易数据,存在缺失日期
data = {
    "timestamp": [
        pd.Timestamp("2020-01-01 01:00"),
        pd.Timestamp("2020-01-01 05:00"),
        pd.Timestamp("2020-01-02 03:00"),
        pd.Timestamp("2020-01-04 04:00"),
        pd.Timestamp("2020-01-05 00:00"),
    ],
    "transaction": [
        100.00,
        102.00,
        103.00,
        102.80,
        99.88
    ]
}

df = pd.DataFrame.from_dict(data, orient="columns")
df.set_index("timestamp", inplace=True)
print(df)

原始数据输出:

transaction
timestamp                        
2020-01-01 01:00:00       100.00
2020-01-01 05:00:00       102.00
2020-01-02 03:00:00       103.00
2020-01-04 04:00:00       102.80
2020-01-05 00:00:00        99.88

基础重采样代码与问题结果

naive_resample = df["transaction"].resample("1D").agg({'open': 'first', 'high': 'max', 'low': 'min', 'close': 'last'})
print(naive_resample)

基础重采样输出:

open    high     low   close
timestamp                                 
2020-01-01  100.00  102.00  100.00  102.00
2020-01-02  103.00  103.00  103.00  103.00
2020-01-03     NaN     NaN     NaN     NaN
2020-01-04  102.80  102.80  102.80  102.80
2020-01-05   99.88   99.88   99.88   99.88

高效解决方案(无手动循环)

通过以下步骤实现需求,全程利用Pandas向量化操作保证性能:

  1. 生成基础OHLC重采样数据,保留交易日的真实高低收盘价
  2. 用向前填充补全无交易日期的OHLC值,实现“价格未变动”逻辑
  3. 修正开盘价:将每个交易日的开盘价替换为前一日收盘价,首个交易日保留原始开盘价

完整实现代码

import pandas as pd

# 1. 基础OHLC重采样
ohlc = df["transaction"].resample("1D").agg({
    'open': 'first',
    'high': 'max',
    'low': 'min',
    'close': 'last'
})

# 2. 向前填充缺失值,处理无交易日期
ohlc_filled = ohlc.ffill()

# 3. 修正开盘价:替换为前一日收盘价,首个交易日保留原始值
ohlc_filled['open'] = ohlc_filled['close'].shift(1).fillna(ohlc_filled['open'])

print(ohlc_filled)

最终输出结果

open    high     low   close
timestamp                                 
2020-01-01  100.00  102.00  100.00  102.00
2020-01-02  102.00  103.00  103.00  103.00
2020-01-03  103.00  103.00  103.00  103.00
2020-01-04  103.00  102.80  102.80  102.80
2020-01-05  102.80   99.88   99.88   99.88

逻辑说明

  • ffill()自动将前一个有效交易日的OHLC值填充到无交易日期,完美匹配“价格未变动”要求
  • shift(1)获取前一日收盘价替换当日开盘价,fillna确保首个交易日开盘价保留原始第一笔交易价格
  • 全程使用Pandas内置向量化操作,无手动循环,大数据量下性能远优于纯Python实现

内容的提问来源于Stack Exchange,提问作者Mikko Ohtamaa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:15:33