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

np.select条件中AND运算符未生效返回错误选项如何解决?

问题原因

Python 中&(位与)的优先级高于|(位或),你原有条件的计算逻辑和预期不一致:
你预期的第一个条件逻辑是:(A等于2107 或 A等于6316) 且 B在10000000到19969999之间,但实际运算时会先计算所有&连接的部分,再计算|,所以实际的第一个条件逻辑变成了:A等于2107,或者(A等于6316 且 B在10000000到19969999之间)。
你的示例数据里A等于2107,所以第一个条件直接返回True,直接命中Return 1的分支,和B的取值无关。

解决方法

把OR连接的A值判断部分整体用括号包裹,明确运算优先级,修正后的代码如下:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [2107], 'B': [76380700]})
cond = [
    # 给A的OR判断整体加括号,再和B的条件做AND
    ((df["A"]==2107)|(df["A"]==6316)) & (df['B']>=10000000) & (df['B']<=19969999),
    ((df["A"]==2107)|(df["A"]==6316)) & (df['B']>=1000000) & (df['B']<=99999999)
]
choices = ["Return 1", "Return 2"]
df["C"] = np.select(cond, choices, default = df["A"])

修正后运行代码,df["C"]的结果会符合预期为Return 2。


内容的提问来源于stack exchange,提问作者João Galdino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:06:08