Pandas自定义百分比变化函数触发ValueError报错求解
报错原因
你使用Python原生的if判断处理Pandas Series对象时,yest==0返回的是一整列布尔值,Pandas无法直接判断整组布尔值的真假,因此抛出该歧义错误。
解决方案
方案1:直接使用向量化运算(推荐,性能最高)
直接调用numpy.where完成条件判断,不需要额外定义函数:
import numpy as np df['newcol'] = np.where( df['col1'] == 0, -999, ((df['col2'] - df['col1']) / df['col1']) * 100 )
方案2:修改自定义函数适配Pandas向量化逻辑
如果需要保留自定义函数的封装形式,可以改用Pandas内置的where方法实现条件替换:
def percentchange(today, yest, vl): # 先计算所有非零值的百分比变化,再把yest为0的位置替换为指定值 return ((today - yest)/yest * 100).where(yest != 0, vl) df['newcol'] = percentchange(df['col2'], df['col1'], -999)
两种方案均为向量化运算,运行效率远高于逐行遍历的apply写法,且不会触发布尔值歧义报错。
内容的提问来源于stack exchange,提问作者Sylv99
相关产品推荐
相关产品推荐

