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

Pandas如何不指定列名对多列批量运算并生成新列

Pandas 多列通用计算逐行求和追加新列方案

原代码报错原因

  • 列名生成逻辑错误:range(len(df.columns))默认从0开始计数,第一次循环生成的列名是A0,和数据集实际存在的A1起始列名不匹配,触发KeyError
  • 存在多处笔误:定义的函数名为construct_matrix,调用时写成了matrix_constructor;最后打印的变量为未定义的df_read,和实际读取数据存储的df变量名不一致

推荐实现(向量化运算,性能最优)

不需要逐列手写公式,也不需要显式写循环,利用pandas原生的整表向量化计算即可,运行效率远高于逐列循环,代码也更简洁。

  • 如果你的DataFrame中只有A1~A120需要参与计算的列,无其他无关列,直接用如下代码:
import pandas as pd

df = pd.read_csv('sample.csv')
# 对所有值做平方减自身计算,再按行求和赋值给新列
df['calc'] = (df ** 2 - df).sum(axis=1)
  • 如果DataFrame中存在其他不需要参与计算的列,可以先筛选目标列再运算,避免无关值干扰结果:
import pandas as pd

df = pd.read_csv('sample.csv')
# 筛选所有列名以A开头加数字格式的目标列
target_columns = df.columns[df.columns.str.match(r'^A\d+$')]
df['calc'] = (df[target_columns] ** 2 - df[target_columns]).sum(axis=1)

参数说明:sum(axis=1)指定按行方向做求和,即对每一行所有列的计算结果加总,完全匹配你需要的计算规则。

修正后的循环写法(仅作参考,不推荐生产环境使用)

如果要保留原循环逻辑,修正索引偏移和笔误问题后也可正常运行,但数据量较大时性能会明显差于向量化方案:

import pandas as pd

df = pd.read_csv('sample.csv')

def construct_matrix():
    temp_sumsqc = 0
    # 索引从1开始,匹配A1~A120的列名规则
    for i in range(1, len(df.columns) + 1):
        col_name = f'A{i}'
        temp_sumsqc += df[col_name] ** 2 - df[col_name]
    df["calc"] = temp_sumsqc

# 统一变量名和函数名
construct_matrix()
print(df.to_string())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 05:42:31