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

如何高效对Pandas数据框每行按列类型均值进行归一化?

高效实现按列类行均值归一化的Pandas方案

你的问题核心是避免逐行遍历,用Pandas的向量化操作替代apply(axis=1)——后者在50万行数据上会因为Python层循环导致极慢。下面是高效的实现方案:

步骤说明

  1. 拆分列组:把A类、B类列分别筛选出来,无需创建额外的均值列
  2. 向量化计算行均值:直接用.mean(axis=1)计算每类列的行均值,这是底层优化的操作,速度远超逐行apply
  3. 广播归一化:利用Pandas的广播机制,让每类的所有列直接除以对应行的均值,一步完成归一化
  4. 合并结果:把归一化后的A类、B类列合并回同一个DataFrame,保持原列顺序

完整代码

import pandas as pd

# 示例数据
df = pd.DataFrame({'A1': [1,2,3],
                   'A2': [4,5,6],
                   'A3': [7,8,9],
                   'B1': [11,12,13],
                   'B2': [14,15,16],
                   'B3': [17,18,19]                  
                  })

# 处理A类列:筛选+归一化
a_cols = df.filter(like='A')
a_normalized = a_cols.div(a_cols.mean(axis=1), axis=0)

# 处理B类列:筛选+归一化
b_cols = df.filter(like='B')
b_normalized = b_cols.div(b_cols.mean(axis=1), axis=0)

# 合并结果,保持原列顺序
result = pd.concat([a_normalized, b_normalized], axis=1)[df.columns]

print(result)

输出结果

A1A2A3B1B2B3
0.251.01.750.3666670.4666670.566667
0.251.01.750.3636360.4545450.545455
0.251.01.750.3611110.4444440.527778

效率说明

这种方案完全用Pandas的向量化操作,没有Python层的逐行循环,处理50万行300列的数据,耗时应该在几秒到十几秒,远低于你之前的30分钟。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:47:28