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

使用np.where多列条件生成DataFrame列时结果异常的问题排查

问题:np.where实现条件列时结果不符合预期

你写的代码里,问题出在运算符优先级上:&(按位与)的优先级比==高,所以你的条件data["col1"]==1 & data["col2"]会被Python先计算1 & data["col2"]。

因为col2是布尔值,True对应1,False对应0,所以1 & False结果是0,1 & True结果是1。之后再用data["col1"]和这个结果做相等判断:

  • 索引0的col1是0,0 == 0 → True,所以np.where返回1
  • 索引5的col1是0,0 == 0 → True,同样返回1
    这就导致了不符合预期的结果。

解决办法

给每个条件单独加括号,确保先执行==判断,再用&连接两个布尔数组:

import pandas as pd
import numpy as np

data = pd.DataFrame({"col1": [0, 1, 1, 1,1, 0],
                     "col2": [False, True, False, False, True, False]
                     })

# 正确写法
data.assign(col3=np.where((data["col1"]==1) & data["col2"], 1, 0))

运行后得到的结果就是你期望的:

col1   col2  col3
0     0  False     0
1     1   True     1
2     1  False     0
3     1  False     0
4     1   True     1
5     0  False     0

补充:更简洁的实现

因为布尔值在Python里可以直接转为整数(True→1,False→0),所以也可以不用np.where,直接把条件表达式转成int类型:

data["col3"] = ((data["col1"]==1) & data["col2"]).astype(int)

效果和上面的代码完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 17:17:13