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

如何基于NAME匹配条件计算两个Pandas DataFrame的PRICE差值?

问题:基于NAME匹配计算两个DataFrame的PRICE差值

现有两个Pandas DataFrame:

df1 = pd.DataFrame({'NAME' : ['A','B','L','M','Q'],'PRICE' : [10,20,30,40,50]})

df2 = pd.DataFrame({'NAME' : ['A','L','Q','M','B'],'PRICE' : [60,80,70,70,60]})

需求:当df1与df2的NAME字段匹配时,用df2的PRICE减去df1的PRICE,期望得到如下结果:

NAME : 'A'    'B'   'L'   'M'    'Q'
PRICE: 50   40  50  30  20

解决方案

方法一:合并后计算差值

通过merge方法将两个DataFrame按NAME字段合并,再计算PRICE的差值,最后整理格式:

import pandas as pd

df1 = pd.DataFrame({'NAME' : ['A','B','L','M','Q'],'PRICE' : [10,20,30,40,50]})
df2 = pd.DataFrame({'NAME' : ['A','L','Q','M','B'],'PRICE' : [60,80,70,70,60]})

# 合并DataFrame,添加后缀区分两个表的PRICE字段
merged = pd.merge(df1, df2, on='NAME', suffixes=('_df1', '_df2'))
# 计算差值
merged['PRICE_DIFF'] = merged['PRICE_df2'] - merged['PRICE_df1']
# 按NAME排序并设置索引,得到期望格式
result = merged[['NAME', 'PRICE_DIFF']].sort_values('NAME').set_index('NAME')
print(result)

运行输出:

PRICE_DIFF
NAME            
A              50
B              40
L              50
M              30
Q              20

方法二:设置索引后直接运算

将两个DataFrame的索引设为NAME,利用Pandas的索引自动匹配特性直接做减法,代码更简洁:

import pandas as pd

# 设置NAME为索引
df1 = df1.set_index('NAME')
df2 = df2.set_index('NAME')

# 直接计算差值,并重命名列
result = (df2 - df1).rename(columns={'PRICE': 'PRICE_DIFF'}).sort_index()
print(result)

输出结果与方法一完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 07:53:18