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
相关产品推荐
相关产品推荐

