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

如何使用if elif else按条件为Pandas DataFrame新建列赋值

Pandas 三分支条件为DataFrame新增列实现方案

核心注意点:判断空值NaN不能使用== NaN的写法,NaN和任何值(包括自身)做相等判断都会返回False,空值判断需要用pd.isna()方法。

方法1:修改原有列表推导式(适合小数据量场景)

列表推导的三元表达式支持多层嵌套,语法结构为[返回值1 if 条件1 else 返回值2 if 条件2 else 默认返回值 for 迭代元素],对应需求修改后的代码如下:

import pandas as pd

df['status'] = [
    1 if i == 'Enable'
    else 0 if i == 'Disable'
    else 2
    for i in df['name']
]

前两个条件分别匹配'Enable'和'Disable',剩余未匹配的就是NaN值,统一赋值为2即可。

方法2:矢量化赋值(大数据量场景推荐,性能远高于列表推导)

Pandas和Numpy提供的矢量化方法是官方推荐的写法,不需要逐行遍历,执行效率更高,这里给两种最常用的实现:

  • 用np.select做多分支匹配,逻辑清晰可读性强
import numpy as np

# 按优先级顺序写判断条件、对应赋值
cond_list = [
    df['name'] == 'Enable',
    df['name'] == 'Disable',
    pd.isna(df['name'])
]
value_list = [1, 0, 2]

df['status'] = np.select(cond_list, value_list)
  • 固定值映射场景用map+fillna,代码最简洁
    因为name列只有三类固定取值,直接构建映射字典处理已知值,剩余空值统一填充即可:
status_map = {'Enable':1, 'Disable':0}
df['status'] = df['name'].map(status_map).fillna(2)

注意:尽量不要用逐行apply、iterrows循环的方式做赋值,这类方法的执行效率比矢量化写法低10~100倍,数据量较大时耗时会非常明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 07:45:30