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

如何创建含两个现有DataFrame多列值变化的新DataFrame

需求说明
  • 现有两个对应片段匹配的DataFrame,需要创建新的DataFrame,存储每个属性对应的数值变化结果。
  • 样例数据参考:
    两个DataFrame样例片段
实现方法(Pandas)

核心逻辑是先对齐两个DataFrame的索引与列顺序,避免位置错位,再直接做数值运算生成结果,效率远高于逐列循环处理。

1. 基础差值计算

如果变化结果定义为「第二个DataFrame数值 - 第一个DataFrame对应位置数值」,直接执行以下代码即可:

import pandas as pd

# 自动对齐两个表的行索引、列顺序,避免错位
df1_aligned, df2_aligned = df1.align(df2)
# 逐元素计算差值,生成变化结果表
df_change = df2_aligned - df1_aligned

如果需要直观区分列含义,可以给变化表的列名统一加后缀:

df_change = df_change.add_suffix('_变化量')

2. 同时保留原值与变化值

如果需要新表同时存储两个原表的原始数值、以及变化幅度,可以通过拼接整合多部分内容:

# 给不同来源的列加标识
df1_with_tag = df1.add_suffix('_初始值')
df2_with_tag = df2.add_suffix('_最终值')
df_change_with_tag = df_change.add_suffix('_变化量')

# 按列拼接生成完整结果表
df_result = pd.concat([df1_with_tag, df2_with_tag, df_change_with_tag], axis=1)

3. 含非数值列的处理

如果表中存在ID、名称这类不参与差值计算的标识类列,先将这类列设置为索引再计算,避免触发类型报错:

# 例:将name列设为行索引,不参与差值运算
df1 = df1.set_index('name')
df2 = df2.set_index('name')
df_change = df2 - df1
# 运算完成后可按需将索引转回普通列
df_change = df_change.reset_index()

注意:如果原表存在空值,对应位置的计算结果也会返回空值,可在计算前调用fillna()方法对原表做缺失值填充。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:18:46