如何在为DataFrame新增列时使用And、Or等逻辑条件语句
报错原因
你写的语句存在两个问题:
- Pandas 中对 Series(也就是DataFrame的列)做布尔运算时,不能使用Python原生的
or/and关键字,需要改用位运算符|(代表逻辑或)、&(代表逻辑且) - 语义逻辑错误:
df['code'] == 0 or 1的写法不管在原生Python还是Pandas中,都无法实现“值等于0或者等于1”的判断,会直接返回True
正确写法
方法1:基于np.where的多条件写法
每个独立判断条件都用括号包裹,多个条件之间用|连接即可:
df['new'] = np.where((df['code'] == 0) | (df['code'] == 1), 1, 0)
方法2:更简洁的isin写法
如果是判断值属于某个枚举集合的场景,直接用isin方法代码可读性更高,最后转整数类型即可直接得到1/0的结果:
df['new'] = df['code'].isin([0, 1]).astype(int)
注意事项
使用位运算符|/&时必须给每个独立条件加括号,否则会因为运算符优先级问题导致计算逻辑错误,依旧报错。
内容的提问来源于stack exchange,提问作者Ayush Sinha
相关产品推荐
相关产品推荐

