np.where结合数值计算判断实现pandas列赋值未按预期运行问题求助
问题原因
核心错误是运算符优先级不符合预期,Python 中位运算符&的优先级远高于比较运算符>/>=/<=,你写的条件没有对独立判断加括号分组,导致运算逻辑完全偏离需求:
原代码第一个条件段df['valueA'] > 0 & ((df['valueB'] - df['valueC']) >= -.1)实际执行顺序为:
- 优先计算
0 & ((df['valueB'] - df['valueC']) >= -.1),该表达式结果恒为0 - 再计算
df['valueA'] > 0,最终整个组合条件几乎全为真,所以所有行都被赋值为oldMoneyValue。
修复方案
给每一组独立的比较条件都加上小括号,明确运算优先级即可,修正后代码如下:
df['newMoneyValue'] = np.where( (df['valueA'] > 0) & ((df['valueB'] - df['valueC']) >= -.1) & ((df['valueB'] - df['valueC']) <= .1) ,df['oldMoneyValue'] ,df['newMoneyValue'])
注:pandas 多条件布尔判断的通用规范就是每个独立比较逻辑都用括号包裹,避免优先级坑。
内容的提问来源于stack exchange,提问作者mattie_g
相关产品推荐
相关产品推荐

