Pandas中np.where逻辑错误排查:多列条件与固定列约束问题
问题原因及解决方案
问题根源:逻辑运算符优先级错误
Python中,&(按位与)的优先级高于|(按位或)。你的代码实际执行的逻辑是:(df['01']>0) | (df['02']>0) | (df['03']>0) | [(df['04']>0) & (df['spend']==0)]
这就导致只要01/02/03任意一列大于0,哪怕spend>0,整个条件也会被判定为True,进而标记为1,完全偏离了你原本的需求。
修正后的代码
把所有“01-04任意一列大于0”的条件用括号整体包裹,再和“spend等于0”的条件做与运算:
import numpy as np df['indicator'] = np.where( ((df['01'] > 0) | (df['02'] > 0) | (df['03'] > 0) | (df['04'] > 0)) & (df['spend'] == 0), 1, 0 )
修正后的逻辑说明
- 先判断01、02、03、04是否至少有一列大于0
- 再判断
spend是否等于0 - 只有两个条件同时满足时,才标记为1,否则为0,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者Maths12
相关产品推荐
相关产品推荐

