You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中apply生成star0列失效问题:与age0列代码逻辑差异排查

问题分析与解决方案

嘿,我一眼就看出问题出在哪了——你在star0的条件判断里误用了位运算符|,而不是用来做逻辑判断的or!

为啥第一行代码好像能正常运行?

其实你的第一行data['age0']的代码也存在逻辑隐患,只是刚好数值的位运算结果碰巧让条件“蒙对”了。但到了第二行,x == -1 | x == 3000这类表达式的位运算结果完全不符合你的预期,导致条件永远不成立,所以那些明明符合条件的行,star0还是被赋值成了2。

两种正确的修改方式:

方式1:换成逻辑运算符or

这是最直接的修改,把所有的|替换成or就行:

data['star0'] = data['user_star_level'].apply(lambda x: 1 if x == -1 or x == 3000 or x == 3001 else 2)

方式2:用in判断(更简洁高效)

当需要判断某个值是否在一组选项里时,用in会让代码更清爽,尤其是选项数量多的时候:

data['star0'] = data['user_star_level'].apply(lambda x: 1 if x in {-1, 3000, 3001} else 2)

额外小技巧:Pandas更高效的写法

其实不用apply也能实现,用Pandas自带的isin结合np.where性能会更好(数据量大的时候差距明显):

import numpy as np
data['star0'] = np.where(data['user_star_level'].isin([-1, 3000, 3001]), 1, 2)

最后再唠两句区别

  • |是位运算符:它会把两边的数值转成二进制按位运算,比如-1 | 3000的结果是个很大的负数,和你要判断的x完全不匹配,所以条件永远为False。
  • or是逻辑运算符:它会依次判断每个表达式的真假,只要有一个为真,整个条件就成立,这才是你需要的逻辑判断逻辑。

内容的提问来源于stack exchange,提问作者Gemma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:46:10