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

如何在Python中生成显示两个DataFrame行级数值差异的新DataFrame?

计算两个DataFrame指定列的数值差异

假设你的两个DataFrame分别叫df_old(旧数据集)和df_new(新数据集),要对比的列是Quantity、Price、Local Value、Local Exposure,下面分两种场景给你具体操作:

场景1:两行数据完全对齐(索引/行顺序一致)

如果两个DataFrame的每一行是一一对应的(比如按相同顺序排列,或者索引完全匹配),直接对指定列做减法就行,步骤如下:

import pandas as pd

# 定义需要对比的列名
cols_to_compare = ['Quantity', 'Price', 'Local Value', 'Local Exposure']

# 计算新数据减旧数据的差异(想算旧减新就反过来)
df_diff = df_new[cols_to_compare] - df_old[cols_to_compare]

# 给列名加上后缀,明确是差异值
df_diff.columns = [f'{col}_diff' for col in cols_to_compare]

运行后df_diff就是只包含各列数值差异的新DataFrame,正数代表新数据比旧数据大,负数则相反。

场景2:行顺序不一致,但有共同标识列

如果两个DataFrame的行排序不一样,但有共同的唯一标识列(比如商品ID、名称这类),就得先合并再计算差异:

import pandas as pd

# 假设共同的标识列是'Product ID'(换成你实际的列名)
merge_key = 'Product ID'
cols_to_compare = ['Quantity', 'Price', 'Local Value', 'Local Exposure']

# 合并两个数据集,只保留标识列和需要对比的列
merged_df = pd.merge(
    df_old[[merge_key] + cols_to_compare],
    df_new[[merge_key] + cols_to_compare],
    on=merge_key,
    suffixes=('_old', '_new')  # 给新旧数据的列加后缀区分
)

# 逐个计算每列的差异
for col in cols_to_compare:
    merged_df[f'{col}_diff'] = merged_df[f'{col}_new'] - merged_df[f'{col}_old']

# 提取标识列和所有差异列,得到最终的差异DataFrame
df_diff = merged_df[[merge_key] + [f'{col}_diff' for col in cols_to_compare]]

额外提醒

  • 如果某个行只在其中一个DataFrame里存在,合并时可以把how='outer'加到pd.merge()参数里,这样会保留所有行,差异列会显示NaN,需要的话可以用df_diff.fillna(0)把缺失值换成0。
  • 确保要对比的列都是数值类型,如果是字符串格式的数字,得先转成数值(比如用pd.to_numeric())。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:40:27