如何基于列值在Pandas DataFrame中无循环高效计算Coeff列?
Pandas大型数据集高效计算Coeff列方案
问题场景
现有如下结构的Pandas DataFrame df_1:
Phase_1 Phase_2 Phase_3 0 8 4 2 1 4 6 3 2 8 8 3 3 10 5 8 ...
需要新增名为Coeff的列,计算逻辑为(Phase_max - Phase_min) / Phase_max,其中Phase_max是每行中所有Phase开头列的最大值,Phase_min是对应行的最小值。期望输出如下:
Phase_1 Phase_2 Phase_3 Coeff 0 8 4 2 0.75 1 4 6 3 0.5 2 8 8 3 0.625 3 10 5 8 0.5
针对大型数据集,需采用无循环的最优实现方式。
最优实现方案
利用Pandas的矢量化行操作直接计算,完全避免循环,是处理大型数据集的最优方式:
# 筛选所有以Phase_开头的列 phase_cols = df_1.filter(like='Phase_').columns # 计算每行的最大值与最小值 row_max = df_1[phase_cols].max(axis=1) row_min = df_1[phase_cols].min(axis=1) # 生成Coeff列 df_1['Coeff'] = (row_max - row_min) / row_max
方案优势
- 极致效率:Pandas的
max(axis=1)和min(axis=1)是底层优化的矢量化操作,比Python循环快数倍至数十倍,适配百万级以上的大型数据集。 - 灵活适配:通过
filter(like='Phase_')自动匹配所有Phase类列,后续新增同类型列无需修改代码。 - 逻辑清晰:代码直接对应需求中的计算步骤,可读性强,便于维护。
内容的提问来源于stack exchange,提问作者QQ1821
相关产品推荐
相关产品推荐

