Pandas列求和与常量取min报ValueError的原因及解决方法
错误提示含义
你调用的Python内置min()函数仅支持对单个标量值或者单组可迭代序列做大小对比,你传入的第二个参数df['a'] + df['b']是pandas的Series对象(包含多行值的一维数组)。内置min()做大小判断时需要返回确定的布尔结果,但一组值和单个标量对比的整体布尔结果没有统一定义,因此触发了该歧义错误,提示你需要先将Series转换为单个布尔值再做判断。
正确实现方案
要实现逐行对比取最小值的需求,需要使用支持逐元素运算的pandas/numpy内置方法,以下两种写法都可以实现需求:
- 方法1:使用pandas的
clip方法截断上限
import pandas as pd df = pd.DataFrame([{'a': 1, 'b': 2}, {'a':3, 'b':3}]) # 计算a+b后将大于5的值截断为5 df['c'] = (df['a'] + df['b']).clip(upper=5)
- 方法2:使用numpy的逐元素最小值方法
np.minimum
import pandas as pd import numpy as np df = pd.DataFrame([{'a': 1, 'b': 2}, {'a':3, 'b':3}]) # 逐元素对比5和a+b的结果,取更小值 df['c'] = np.minimum(5, df['a'] + df['b'])
两种写法最终得到的c列结果一致,第一行取值为3,第二行取值为5,完全符合预期需求。
内容的提问来源于stack exchange,提问作者Cuteufo
相关产品推荐
相关产品推荐

