如何加速DataFrame中50万列与指定列的批量相减操作?
加速DataFrame批量列减法的方法
你的问题核心是避免Python层面的逐列循环——pandas的循环操作在列数极多(50万列)时会产生巨大的开销,换成矢量化运算能把速度提升几个数量级。
直接用pandas的广播特性一次性完成所有列的减法:
# 筛选出除Intercept之外的所有目标列 target_cols = reg_df.columns.difference(['Intercept']) # 一次性对所有目标列执行减法,利用广播自动匹配行维度 reg_df[target_cols] = reg_df[target_cols].sub(reg_df['Intercept'], axis=0)
为什么这方法更快?
- 原循环是逐列调用
sub,每一步都要处理列的索引、赋值等Python层面的逻辑,50万次循环的开销累积起来非常大。 - 矢量化运算直接调用底层numpy的C语言实现,一次性对所有列做运算,完全跳过了Python循环的额外开销。
额外优化建议
- 调整数据类型:如果业务允许,把数据类型从
float64转为float32,能减少内存占用,进一步提升运算速度:reg_df = reg_df.astype('float32') - 确保内存充足:保证机器有足够内存加载整个DataFrame,避免因内存不足触发磁盘交换(swap)拖慢速度。
内容的提问来源于stack exchange,提问作者srinaath_david
相关产品推荐
相关产品推荐

