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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:15:03