如何基于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
相关产品推荐
相关产品推荐

