如何在pandas中使用向量化操作替代for循环完成列计算
Pandas 循环向量化改造方案
两种完全匹配原逻辑的向量化实现如下,改造后可将1.7万行的计算耗时从3秒降至毫秒级:
方案1:基于 .loc 的条件赋值(最贴合原逻辑)
# 构造布尔掩码:筛选两列均不为0的行 mask = (model_olculeri["Bel"] != 0) & (model_olculeri["Basen"] != 0) # 对符合条件的行批量计算并赋值 model_olculeri.loc[mask, "Waist to Hip Ratio"] = model_olculeri.loc[mask, "Bel"] / model_olculeri.loc[mask, "Basen"]
方案2:基于 numpy.where 的单语句实现
import numpy as np # 参数规则:(判断条件, 条件成立时的取值, 条件不成立时的取值) # 若为首次创建新列,不满足条件的位置可直接填充为 np.nan model_olculeri["Waist to Hip Ratio"] = np.where( (model_olculeri["Bel"] != 0) & (model_olculeri["Basen"] != 0), model_olculeri["Bel"] / model_olculeri["Basen"], model_olculeri.get("Waist to Hip Ratio", np.nan) )
注意事项
- Pandas 批量布尔运算需使用
&替代Python原生的and,每个判断条件必须用括号包裹,避免运算符优先级报错 - 向量化操作底层为C实现的批量运算,完全规避了Python层逐行循环的开销,性能提升可达数百倍
内容的提问来源于stack exchange,提问作者Samet
相关产品推荐
相关产品推荐

