如何在pandas中迭代多列并结合另一DataFrame的Mean、Dev值进行计算
简化DataFrame逐列标准化运算的实现方法
你可以利用pandas的广播特性省去逐行、逐列手动编写代码的麻烦,核心逻辑是让df的列和df1的行按顺序一一匹配参数。
最优方案:全量向量化运算(无循环,效率最高)
直接通过数组广播完成所有列的批量计算,无论df有多少列都可以自动适配,只要保证df1的行数和df的列数一一对应即可:
# 按列匹配df1的Mean和Dev完成减均值除以Dev的运算 df_normalized = (df - df1['Mean'].values) / df1['Dev'].values
逐列处理的循环方案(适用于需要单独处理每列结果的场景)
如果需要对每列的计算结果做单独输出或后续处理,可以遍历df的列索引匹配df1的参数:
for col_idx, col_name in enumerate(df.columns): # 取当前列对应的均值和偏差值 current_mean = df1.loc[col_idx, 'Mean'] current_dev = df1.loc[col_idx, 'Dev'] # 整列运算,无需逐行遍历 res = (df[col_name] - current_mean) / current_dev # 此处可自定义结果处理逻辑,比如打印、保存 print(f"列{col_name}计算结果:") print(res.reset_index(drop=True))
说明
你原来代码里的逐行遍历for i in range(0, len(df))是冗余写法,pandas原生支持Series(单列数据)的批量算术运算,执行效率远高于逐行循环,数据量越大优势越明显。
内容的提问来源于stack exchange,提问作者Nithin Reddy
相关产品推荐
相关产品推荐

