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

如何计算两个DataFrame多行多列的行和差值并生成新DataFrame

实现方案:计算两个DataFrame行求和的差值矩阵

我来给你一个用Pandas实现的简洁方案,完全满足你的需求:

步骤1:准备数据并计算每行的求和值

首先我们先构造你给出的两个DataFrame,然后分别计算每行的UV、VIOLET、BLUE三列的总和:

import pandas as pd

# 构造df1
df1 = pd.DataFrame({
    'WAV': ['sD1', 'sA4', 'sA1', 'sC2', 'sC3'],
    'UV': [10.8, 6.2, 8.3, 7.9, 10.7],
    'VIOLET': [10.1, 8.2, 11.7, 8.2, 9.5],
    'BLUE': [23.5, 19.9, 28.6, 31.0, 18.1]
})

# 构造df2
df2 = pd.DataFrame({
    'ID': ['D1', 'D2', 'D3', 'D4', 'D5'],
    'UV': [7.9, 7.0, 21.4, 10.3, 21.7],
    'VIOLET': [10.1, 9.2, 20.7, 8.9, 16.5],
    'BLUE': [19.3, 15.9, 27.4, 20.9, 21.3]
})

# 计算df1每行的总和,索引设为WAV列
df1_sum = df1.set_index('WAV').sum(axis=1)
# 计算df2每行的总和,索引设为ID列
df2_sum = df2.set_index('ID').sum(axis=1)

步骤2:生成差值矩阵

利用Pandas的广播特性,我们可以轻松计算df2每行总和与df1每行总和的差值,生成目标DataFrame:

# 计算差值:df2的每个行总和 减去 df1的每个行总和
diff_matrix = pd.DataFrame(
    df2_sum.values.reshape(-1, 1) - df1_sum.values,
    index=df2_sum.index,
    columns=df1_sum.index
)

# 如果需要将列名改为你期望的格式(比如sum(D1)-sum(sD1)),可以执行以下代码:
diff_matrix.columns = [f"sum({row_id})-sum({col})" for col in diff_matrix.columns]
# 注:如果要让列名完全匹配每行的ID(比如D1行的列名是sum(D1)-sum(sD1)),DataFrame的固定列名特性无法实现,但可以通过输出时的格式化来展示,或者保持列名为df1的WAV值,这样更符合数据结构规范

最终结果

执行完上述代码后,diff_matrix就是你想要的结果。如果保持列名为df1的WAV值,结果如下:

sD1   sA4   sA1   sC2   sC3
ID                                
D1  -14.1  -6.0 -20.7  -7.6 -10.9
D2  -19.1 -11.0 -25.7 -12.6 -15.9
D3   14.9  23.0   8.9  18.4  19.9
D4   -7.1   1.0 -13.7  -2.6  -3.9
D5   10.9  19.0   4.9  14.4  15.9

如果改成你期望的列名格式,结果会是:

sum(D1)-sum(sD1)  sum(D1)-sum(sA4)  sum(D1)-sum(sA1)  sum(D1)-sum(sC2)  sum(D1)-sum(sC3)
ID                                                                                            
D1             -14.1              -6.0             -20.7              -7.6             -10.9
D2             -19.1             -11.0             -25.7             -12.6             -15.9
D3              14.9              23.0               8.9              18.4              19.9
D4              -7.1               1.0             -13.7              -2.6              -3.9
D5              10.9              19.0               4.9              14.4              15.9

补充说明

  • 这里用到的广播特性是Pandas的核心功能之一,当你用一维数组(Series)和 reshaped后的一维数组做运算时,Pandas会自动对齐维度,完成逐元素的计算,比循环每行计算高效得多。
  • 如果你的数据量很大,这个方法依然能保持良好的性能,因为它基于向量运算而非逐行遍历。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:20:22