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

Pandas实现动态列集列间相减后乘指定列的正确方法

问题根源

你的计算逻辑错误出在差值初始化步骤:你设置diff = 0作为初始值,循环中依次减去列表内所有列,最终得到的计算式是0 - col1 - col2 - col3 = -(col1+col2+col3),和你预期的「用列列表首列作为被减数,依次减去后续所有列」的逻辑不符。
按你给出的预期值反推,3个符合预期的行均匹配col1 - col2 - col3的计算逻辑,仅第三行预期值-15和样例数据计算结果冲突,应为笔误,可自行核对原始数据。

修复方案

写法1:修正循环逻辑

将差值初始值设为列列表的第一列,再从第二个列开始遍历做减法即可:

import pandas as pd

df = pd.DataFrame({'col0':['09-June-2022', '10-June-2022', 
                           '11-June-2022', '12-June-2022'],
                    'col1':[1,-2,3,-4], 'col2':[-2,5,6,-8], 
                   'col3':[-5,-5,5,9], 'col4': [3,4,5,6]})

columnlist = ['col1', 'col2', 'col3']

# 初始值设为列表第一列,从第二个元素开始遍历减
diff = df[columnlist[0]]
for c in columnlist[1:]:
    diff = diff - df[c]
    
final_calculation = diff.mul(df['col4'])
print(final_calculation)

运行输出:

0    24
1    -8
2   -40
3   -30
dtype: int64

写法2:pandas向量化写法(推荐,适配大数据量)

不用写循环,直接用列和运算实现,运行效率远高于for循环,适配你6万+行的实际数据集:

# 首列减去后续所有列的和,等价于依次减每一列
diff = df[columnlist[0]] - df[columnlist[1:]].sum(axis=1)
final_calculation = diff * df['col4']
适配实际数据集说明
  • 把columnlist替换为你实际需要动态选取的列集合即可,无需修改其他逻辑
  • 你实际数据中存在的NaN值会被默认保留传递,如果需要填充缺失值,可以在计算前调用df = df.fillna(0)或按业务需求填充其他值
  • 若要和其他列相乘,只需把df['col4']替换为目标列即可,比如要乘CalculatedEmissionFactor就写df['CalculatedEmissionFactor']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 23:09:30