Python处理CSV时如何基于多Excel列条件写if语句生成新列
问题原因
你编写的代码报错是因为df.Col1 == 1和df.Col2 == 1返回的是布尔类型的Series(整列的布尔值集合),Python原生的if判断和or运算符无法直接对Series做真值判断,会抛出ValueError: The truth value of a Series is ambiguous类的错误。同时Pandas的列级布尔运算不能用or/and,需要改用按位运算符|/&,且每个判断条件需要用括号包裹避免运算优先级错误。
解决方案
方法1:使用np.where实现(代码最简洁)
适合需要给所有行都赋值的场景,符合条件赋值10,不符合赋值0:
import numpy as np # 括号不能省略,| 代表按位或对应逻辑或的效果 df['newCol'] = np.where((df['Col1'] == 1) | (df['Col2'] == 1), 10, 0)
方法2:使用loc索引实现
适合不需要给不符合条件的行赋值(留空/保留原值)的场景:
# 可选:先给所有行默认赋值0,不需要默认值可删除此行 df['newCol'] = 0 # 仅给符合条件的行赋值为10 df.loc[(df['Col1'] == 1) | (df['Col2'] == 1), 'newCol'] = 10
两种方法都是Pandas的向量化运算,比逐行循环判断效率高很多,适合任意大小的DataFrame使用。
内容的提问来源于stack exchange,提问作者Saad Farooqui
相关产品推荐
相关产品推荐

