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

Pandas df.apply未达预期?它是否属于向量化操作?

问题分析与解答

核心结论

df.apply(axis=1)既不是向量化操作,也不会并行执行,它本质就是逐行调用你定义的Python函数,和iterrows的执行逻辑几乎一致,所以两者耗时接近完全正常。

具体原因

  1. apply(axis=1)的执行逻辑
    当你指定axis=1调用apply时,Pandas会逐行遍历DataFrame,把每一行转换成Series对象后传入你的f3函数。这个过程全程在Python层面循环,没有利用到Pandas/NumPy的C级向量化优化,也没有任何并行处理逻辑。
    你代码里的t.sleep(0.05)直接验证了这一点:100行数据,每行等待0.05秒,总耗时就是100×0.05=5秒左右,和实际运行结果完全匹配,说明确实是逐行串行执行。

  2. 你的需求对应的真正向量化写法
    对于给c2列加1生成d3的简单需求,完全不需要用apply,直接用列级别的向量化运算即可:

    df['d3'] = df['c2'] + 1
    

    这种写法会把整个列的计算交给底层优化后的C代码执行,没有Python循环开销,哪怕是百万级数据也能瞬间完成。

额外建议

如果你的业务逻辑确实需要逐行处理(比如复杂的多列条件判断),apply(axis=1)和iterrows的效率都很低,此时可以考虑:

  • 将数据转为NumPy数组后处理,利用NumPy的向量化能力
  • 使用swifter库,它会自动判断你的函数是否可以被向量化,从而选择最优执行方式
  • 对于计算密集型逻辑,用numba编译Python函数,实现接近C语言的执行效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 17:39:24