在Pandas DataFrame中基于双条件判断实现二元赋值报错排查
解决Pandas赋值新列时的ValueError问题
问题分析
你写的代码逻辑完全错误:df[(df.var1 > df.avg == 1) | (df.var1 < df.avg == 0)] 这种链式比较会被解析成 (df.var1 > df.avg) & (df.avg == 1) 和 (df.var1 < df.avg) & (df.avg == 0),完全偏离了你“大于avg赋值1,小于赋值0”的需求,再加上用布尔Series直接索引DataFrame来赋值新列的方式不符合Pandas逻辑,才触发了ValueError。
正确解决方案
有两种简单直接的方法实现你的需求:
方法1:布尔值转整数
Pandas中布尔类型True等价于1,False等价于0,直接把比较结果转成整数即可:
df['condition'] = (df['var1'] > df['avg']).astype(int)
方法2:使用np.where(正确写法)
如果你想用np.where,要遵循「条件,满足时的值,不满足时的值」的格式:
import numpy as np df['condition'] = np.where(df['var1'] > df['avg'], 1, 0)
测试验证
用你的示例数据测试,两种方法都能得到目标结果:
avg var1 condition 0 30 60 1 1 40 50 1 2 45 20 0 3 50 10 0 4 50 74 1
注:如果存在
var1 == avg的情况,两种方法都会返回0,若需处理这种场景,可以在条件中补充判断逻辑。
内容的提问来源于stack exchange,提问作者user2100039
相关产品推荐
相关产品推荐

