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

如何批量计算两个DataFrame同类指标差值并在df1新增列?

嘿,这个场景我熟!不用手动逐个写计算逻辑的话,有两种高效的实现方式,完全适配你的需求,一起来看看:

方法1:列名对齐批量计算(简洁高效)

这个方法核心是先把df2的列名和df1对齐,然后批量计算差值,最后合并回原DataFrame,代码量极少:

import pandas as pd
import numpy as np

# 生成示例数据(和你提供的一致)
df1 = pd.DataFrame(np.random.randint(0,100,size=(15, 2)), columns=['MetricA', 'MetricB'])
df2 = pd.DataFrame(np.random.randint(0,100,size=(15, 2)), columns=['MetricA1', 'MetricB1'])

# 步骤1:重命名df2的列,去掉末尾的"1",和df1的列名一一对应
df2_renamed = df2.rename(columns=lambda col_name: col_name[:-1])

# 步骤2:批量计算差值,自动生成所有对应列的结果
delta_df = df1 - df2_renamed

# 步骤3:给差值列重命名成你想要的格式(比如DeltaMetricAAndA1)
delta_df.columns = [f'Delta{col}And{col}1' for col in delta_df.columns]

# 步骤4:把差值列合并到df1中
df1 = pd.concat([df1, delta_df], axis=1)

方法2:循环匹配列名(灵活可控)

如果你的列名对应规则偶尔有变动,或者需要加额外判断,循环匹配的方式更灵活:

import pandas as pd
import numpy as np

# 生成示例数据
df1 = pd.DataFrame(np.random.randint(0,100,size=(15, 2)), columns=['MetricA', 'MetricB'])
df2 = pd.DataFrame(np.random.randint(0,100,size=(15, 2)), columns=['MetricA1', 'MetricB1'])

# 遍历df1的每一列,自动匹配df2中对应的"列名+1"列,计算差值
for col in df1.columns:
    # 构造df2中对应的列名
    matching_col = f"{col}1"
    # 检查该列是否存在于df2中,避免报错
    if matching_col in df2.columns:
        # 新增差值列,命名符合你的要求
        df1[f'Delta{col}And{matching_col}'] = df1[col] - df2[matching_col]

两种方法对比

  • 方法1更简洁,适合列名对应规则非常固定(都是原列名加1)的场景,一行代码就能完成所有差值计算
  • 方法2更灵活,比如后续如果有非"列名+1"的对应关系,或者需要对某些列做特殊处理,直接在循环里加判断即可

注意事项

确保df1和df2的行数一致且索引对齐,如果索引不匹配,建议先执行df1.reset_index(drop=True)和df2.reset_index(drop=True)来统一索引,避免计算时出现NaN或者错位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 07:43:11