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

Python pandas使用np.where实现多条件IF判断报错求解

报错原因

你遇到的TypeError: Cannot perform 'rand_' with a dtyped [int64] array and scalar of type [bool]报错由两个核心问题导致:

  1. 运算符优先级错误:pandas中用于多条件逐元素逻辑与的&优先级高于比较运算符==,你写的判断没加括号,代码会优先执行'inbound' & PG['Out_going Calls']这部分,尝试对字符串和整数列做按位与运算,直接触发类型错误。
  2. 代码存在多处笔误:
    • 你提供的样例数据中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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:36:24