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

多索引DataFrame中按合约日期计算日内极值并指定行赋值

处理期权1分钟K线DataFrame的单日合约最高价赋值问题

问题背景

现有包含82万行数据的期权1分钟K线Pandas DataFrame,已将Symbol(合约代码)和Date(日期)设置为MultiIndex。需要实现两个需求:

  • 针对单个合约单日,计算high列的最大值,仅赋值给该合约当日hour为08:30:00的day_high列(此前代码会将最大值填入所有行,需修正)
  • 无需循环,用Pandas原生高效方法批量处理所有合约

解决方案

直接利用groupby结合布尔索引实现精准赋值,全程无循环,适配大数据量:

import pandas as pd
import numpy as np

# 先初始化day_high列为空值(如果还没创建)
df['day_high'] = np.nan

# 筛选出需要赋值的目标行:当日hour为08:30:00的记录
target_rows = df['hour'] == '08:30:00'

# 按MultiIndex的两级(Symbol+Date)分组计算high的最大值,仅给目标行赋值
df.loc[target_rows, 'day_high'] = df.groupby(level=[0, 1])['high'].transform('max')[target_rows]

关键说明

  • 此前代码全列填充的原因:直接对分组结果赋值时未限定目标行,导致整个分组的所有行都被覆盖为最大值。
  • 这里用transform('max')生成与原DataFrame同长度的系列,每个组内元素均为该组的high最大值,再通过target_rows筛选,仅将最大值赋值给当日08:30的行,其余行保持空值。
  • 该方法为Pandas原生向量运算,避免循环,处理82万行数据效率极高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 11:43:15