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

pandas获取同一列相邻两行最大值触发ValueError问题求解

问题排查与解决

报错原因

你使用了Python内置的max()函数,该函数仅支持对单个标量值做大小比较,无法直接对两个pandas Series做逐元素的最大值计算。max()会尝试将完整的Series作为单个对象做布尔判断,因此触发ValueError: The truth value of a Series is ambiguous报错。

修复方案

方案1:使用numpy逐元素最大值函数np.maximum

这是最直接对应你原有逻辑的写法,对两个等长Series的对应位置元素逐一取最大值:

import pandas as pd
import numpy as np

data = {
    'a' : [85, 75, 85, 33, 99, 45],
    'b' : [35, 45, 83, 88, 56, 20],
     'c' : [51, 61, 45, 67, 39, 30],
     'd' : [67, 88, 5, 34, 57, 69]
}

df = pd.DataFrame(data)
df['A1'] = df['a'].shift(1)
df['B1'] = np.maximum(df['b'], df['b'].shift(1))
print(df.head(10))

方案2:使用pandas滚动窗口函数(写法更简洁)

要取当前行与上一行的最大值,等价于对b列做窗口大小为2的滚动最大值计算,无需手动调用shift:

df['B1'] = df['b'].rolling(2).max()

两种方案运行结果一致,第一行由于不存在上一行的参考值,B1列第一行默认返回NaN,符合需求逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 02:54:06