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

Python对DataFrame应用行级条件函数识别相对最大值及报错处理

解决方案

你遇到的报错本质是apply逐行调用时传入了完整Series作为get_max参数,对整个Series做布尔判断才会触发歧义错误,完全无需自定义函数和循环,直接用pandas向量化条件判断即可实现需求:

第一步:修正DataFrame构造

你原代码的df构造缺少high列名,先补全:

import pandas as pd
temp_list = [128.71, 130.2242, 131.0, 131.45, 129.69, 130.17, 132.63, 131.63, 131.0499, 131.74, 133.6116, 134.74, 135.99, 138.789, 137.34, 133.46, 132.43, 134.405, 128.31, 129.1]
df_data = pd.DataFrame(temp_list, columns=['high'])
# 自定义n值,比如取此前3个值做比较
n = 3

第二步:计算滚动最大值

这部分你原有逻辑是对的,shift()是为了排除当前行,只取此前n个值的最大值:

df_data['rolling_max'] = df_data['high'].rolling(n).max().shift()

第三步:向量化条件判断生成ismax列

直接把三个判断条件按位与后转整型即可,全程无循环:

cond1 = df_data['high'] > df_data['high'].shift(1) # 大于前一个相邻值
cond2 = df_data['high'] > df_data['high'].shift(-1) # 大于后一个相邻值
cond3 = df_data['high'] > df_data['rolling_max'] # 大于此前n个值的最大值

df_data['ismax'] = (cond1 & cond2 & cond3).astype(int)

结果说明

  • 首行无前一个相邻值、末行无后一个相邻值,默认会返回0,符合业务逻辑
  • 所有运算都是pandas原生向量化操作,运行效率远高于逐行apply

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:27:01