Pandas按Do it?列值为yes条件乘系数求和报Series真值错误如何解决
你遇到的报错是因为df['Do it?'] == 'yes'返回的是一个长度和DataFrame行数一致的布尔Series,而Python原生的if语句需要单个布尔值做判断,无法直接处理Series类型的判断结果,因此抛出了真值模糊的错误。
正确实现方案
方案1:使用loc按条件赋值(需要保留Result列时推荐)
这是pandas最常用的条件赋值写法,逻辑清晰可读性高:
import pandas as pd # 构造示例数据 data = {'Do it?': ['yes', 'no', 'no', 'no','yes'],'Price': [12,15,10,2,1]} df = pd.DataFrame(data) # 初始化Result列为0,不满足条件的行默认值为0 df['Result'] = 0 # 仅对Do it?为yes的行,将Price*10赋值给Result列 df.loc[df['Do it?'] == 'yes', 'Result'] = df['Price'] * 10 # 计算Result列总和 result_sum = df['Result'].sum() print(result_sum) # 输出结果为130
方案2:使用np.where生成Result列(更简洁)
借助numpy的where方法可以一行完成条件赋值:
import pandas as pd import numpy as np data = {'Do it?': ['yes', 'no', 'no', 'no','yes'],'Price': [12,15,10,2,1]} df = pd.DataFrame(data) df['Result'] = np.where(df['Do it?'] == 'yes', df['Price'] * 10, 0) result_sum = df['Result'].sum()
方案3:无需生成Result列直接计算总和
如果不需要保留中间的Result列,可直接筛选符合条件的行求和再乘10,性能更高:
result_sum = df.loc[df['Do it?'] == 'yes', 'Price'].sum() * 10
内容的提问来源于stack exchange,提问作者Tiago Emanuel Pratas
相关产品推荐
相关产品推荐

