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

Pandas按预设条件新建DataFrame列触发Series真值模糊报错如何解决?

错误原因

你遇到的报错由Pandas布尔索引的运算符优先级规则导致:Python中&(按位与)的优先级高于==(等于判断),你原代码中df['Default_prob'] == 1 & df['Default_category'] == 1会优先计算1 & df['Default_category'],得到布尔类型的Series后再和左右的==1做比较,此时就会触发“The truth value of a Series is ambiguous”的错误。

修复方案

只需要给两个布尔判断条件分别加上小括号,明确计算优先级即可,你也可以直接用Pandas向量化操作替换自定义函数的apply写法,代码更简洁运行效率也更高。

完整可运行代码

import pandas as pd

df = {'category': ['retail', 'retail', 'airtime', 'electronic', 'retail', 'electronic', 'retail', 'retail','airtime'],
'default': [0, 1, 1, 1,0,1,1,1,0],
'year': [2011, 2013, 2014, 2015,2016,2017,2018,2010,2009],
'value': [6000, 6500, 3000, 1200,3200,4530,2100,1000,3400]}
df = pd.DataFrame(df)

# 向量化操作替换自定义apply,处理效率更高
df["Default_prob"] = (df["value"] >= 2800).astype(int)
df["Default_category"] = (df["category"] == "retail").astype(int)

df['probability'] = 0
# 两个布尔条件分别加括号明确计算优先级
df.loc[(df['Default_prob'] == 1) & (df['Default_category'] == 1), 'probability'] = 1

print(df)

运行效果说明

运行后probability列会在同时满足value>=2800且category为retail的行取值为1,其余为0,和预期输出效果一致。


内容的提问来源于stack exchange,提问作者umagba alex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:30:01