如何创建含两个现有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
相关产品推荐
相关产品推荐

