Python pandas使用np.where实现多条件IF判断报错求解
报错原因
你遇到的TypeError: Cannot perform 'rand_' with a dtyped [int64] array and scalar of type [bool]报错由两个核心问题导致:
- 运算符优先级错误:pandas中用于多条件逐元素逻辑与的
&优先级高于比较运算符==,你写的判断没加括号,代码会优先执行'inbound' & PG['Out_going Calls']这部分,尝试对字符串和整数列做按位与运算,直接触发类型错误。 - 代码存在多处笔误:
- 你提供的样例数据中
Segment列取值为首字母大写的Inbound/Outbound,判断条件里写的全小写'inbound'无法匹配到对应数据 - 取值时写的
PG["0"]是不存在的列,你实际需要取值的是Staffed Time列 - 原代码只写了单列表赋值,没有覆盖你需要的
Inbound_Call、Outbound_Call两列计算需求
- 你提供的样例数据中
正确实现代码
import numpy as np # 计算Inbound_Call列 PG["Inbound_Call"] = np.where( (PG["Segment"] == "Inbound") & (PG["Out_going Calls"] == 0), 0, PG["Staffed Time"] ) # 计算Outbound_Call列 PG["Outbound_Call"] = np.where( (PG["Segment"] == "Outbound") & (PG["POM_Count"] == 0), 0, PG["Staffed Time"] )
注意事项
- 用
&(逐元素逻辑与)、|(逐元素逻辑或)连接多条件判断时,每个独立判断条件必须用圆括号单独包裹,否则会因为运算顺序问题触发报错。不要用Python原生的and/or做pandas多条件判断,这两个关键字无法对Series做逐元素逻辑运算。 - 字符串匹配要和列内实际值的大小写、格式完全一致,否则会出现匹配结果为空的问题。
- 你提供的样例数据中存在
Segment列为空值(NaN)的行,上述逻辑会默认将这类行判定为不满足条件,取Staffed Time列的值,如果需要对空值做特殊处理,可以额外补充判断条件。
内容的提问来源于stack exchange,提问作者Mohamed Khamees
相关产品推荐
相关产品推荐

