pandas基于if条件新增列:满足条件赋值1(True)否则赋值0(False)
pandas按条件新增1/0标识列的实现方法
错误原因
你原有写法存在两个问题:
- 不能直接对pandas的Series(整列数据)使用
if df['weekday'] <5这类判断,pandas无法返回单个布尔值,会抛出歧义错误 - if和else分支的赋值逻辑完全一致,无论条件是否成立都执行相同操作,不可能得到预期结果
正确实现方式
以下三种是常用的可行方案,优先推荐前两种向量化操作,执行效率更高:
方案1:布尔值直接转整型(最简洁)
pandas中布尔值True默认对应1,False对应0,直接对判断结果做类型转换即可:
# 规则:weekday >=5 为周末(对应1),否则为0 df['weekend'] = (df['weekday'] >=5).astype(int)
方案2:使用np.where(适合多条件场景)
import numpy as np df['weekend'] = np.where(df['weekday'] >=5, 1, 0)
方案3:使用apply(适合复杂自定义规则)
df['weekend'] = df['weekday'].apply(lambda x: 1 if x >=5 else 0)
最终输出结果
执行后得到的DataFrame如下:
| year | time | weekday | weekend |
|---|---|---|---|
| 2018 | 12 | 4 | 0 |
| 2018 | 8 | 6 | 1 |
| 2017 | 10 | 5 | 1 |
| 2019 | 10 | 1 | 0 |
内容的提问来源于stack exchange,提问作者umagba alex
相关产品推荐
相关产品推荐

