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

Pandas实现向量化条件列赋值 替代低效apply逐行处理方法

Pandas 条件赋值向量化实现方案

当前场景属于典型的多条件分支赋值需求,逐行apply的处理效率极低,以下是三种可直接落地的向量化实现方案,运行速度比apply高数十到上百倍,数据量越大性能优势越明显:


方案1:numpy.where(最简洁,适配当前二分支互斥场景)

你给出的样例中v==1和w==1为互斥关系,直接用二分支判断即可:

import numpy as np
df['z'] = np.where(df['v'] == 1, df['x'], df['y'])

逻辑说明:当第一个参数的条件成立时,取第二个参数的值,否则取第三个参数的值。


方案2:pandas loc 赋值(可读性高,易扩展)

如果后续可能新增更多条件,用loc逐条件赋值的方式更易维护:

# 先初始化z列,也可以根据需求设置默认值
df['z'] = 0
# 匹配v==1的行赋值为x列的值
df.loc[df['v'] == 1, 'z'] = df['x']
# 匹配w==1的行赋值为y列的值
df.loc[df['w'] == 1, 'z'] = df['y']

方案3:numpy.select(适配多分支复杂条件,扩展性最强)

如果后续规则扩展为多个判断分支,用np.select可以一次性配置所有条件和对应返回值:

import numpy as np
# 按优先级配置条件列表
conditions = [
    df['v'] == 1,
    df['w'] == 1
]
# 按条件顺序配置对应返回值
choices = [
    df['x'],
    df['y']
]
# default参数为所有条件都不满足时的默认赋值
df['z'] = np.select(conditions, choices, default=0)

以上三种方案输出的结果和原apply实现完全一致,可根据后续业务扩展需求选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:06:03