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

如何使用Numpy Vectorize替代pandas apply函数实现条件判断

问题解答

np.vectorize 写法修正

你代码报错的核心原因是函数入参和实际传入的参数类型不匹配:你定义的copy_filter预期接收DataFrame行对象、读取DAYS字段判断,但调用a(df['DAYS'])时传入的是DAYS列的单个数值,对数值执行['DAYS']索引操作必然报错。

修正后的代码如下:

# 函数改为接收单个DAYS数值作为入参
def copy_filter(days):
    return days < 365

a = np.vectorize(copy_filter, otypes = [bool])
df['bool_vectorize'] = a(df['DAYS'])

注意:np.vectorize 本质是简化代码的语法糖,并不会带来性能提升,内部依然是循环遍历元素执行函数,运行速度和apply基本一致,甚至可能更慢,生产环境不推荐用这种方式实现简单逻辑。

其他适用的场景优化技术

  • 最简最高效方案:直接利用pandas的向量化比较操作,不需要调用任何额外函数,代码如下:
    df['bool'] = df['DAYS'] < 365
    
    该操作直接在numpy数组层执行计算,是所有实现中性能最高、代码最简洁的方式,完全可以替代你写的apply和np.where版本。
  • 多条件判断场景:如果后续逻辑扩展为多区间、多条件判断,可以用np.select或者pd.cut实现向量化计算,性能远高于逐行判断。
  • 复杂自定义逻辑场景:如果判断逻辑非常复杂无法用现有向量化函数实现,可以用numba库的@njit装饰器编译自定义函数,运行速度可以接近C语言级别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:06:05