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

使用Pandas对百万行DataFrame多列批量执行计算的技术问询

Hey there! 你的代码思路没问题,但用apply(axis=1)逐行处理百万级数据的话,速度会慢到让人崩溃——毕竟apply(axis=1)本质上是在做纯Python循环,完全没用到Pandas基于NumPy的矢量化运算优势。下面给你几个高效的优化方案:

优化百万行DataFrame的列计算方案

方案一:直接矢量化运算(首推,最快)

Pandas的列本身就是NumPy数组,支持直接批量运算,不需要循环或apply:

col_list = ['a', 'b', 'c']
new_col = ['new_a', 'new_b', 'new_c']

# 先计算X的平方,只算一次避免重复计算
x_squared = df['X'] ** 2

# 批量生成新列
for orig_col, new_col_name in zip(col_list, new_col):
    df[new_col_name] = df[orig_col] / x_squared

这种方式把所有运算交给底层的C级优化代码处理,百万行数据几乎瞬间就能完成计算。

方案二:用df.assign()实现简洁链式调用

如果喜欢更清爽的代码风格,可以用assign一次性生成所有新列:

x_squared = df['X'] ** 2
df = df.assign(
    new_a=df['a'] / x_squared,
    new_b=df['b'] / x_squared,
    new_c=df['c'] / x_squared
)

这种写法可读性拉满,而且同样是矢量化运算,效率和方案一几乎没差别。

为什么你的原代码这么慢?

  • df.apply(axis=1)会逐行遍历整个DataFrame,每一行都要调用一次lambda和你的new函数,这是纯Python级别的循环,开销极大。
  • 矢量化运算则是把整个列当作一个数组来处理,完全避开了Python循环的额外消耗,速度能提升几十甚至上百倍。

额外注意事项

如果你的X列里有0值,记得提前处理除以0的问题,比如替换成一个极小值(或者根据你的业务逻辑处理):

x_squared = df['X'] ** 2
# 把0替换成1e-10,避免除以0报错
x_squared = x_squared.replace(0, 1e-10)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:03:33