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

在Pandas中匹配列内行并执行差值计算的实现方法

计算dfB中ID对应dfA数值与自身数值的差值

问题背景

现有两个Pandas DataFrame dfA 和 dfB,定义代码如下:

import pandas as pd
import numpy as np

AIDs = np.array(['y5','x5','x1','x3','y1','x4','y4','y3','y2','x2'])
AValues = np.random.randint(10, 100, size=10)

dfA = pd.DataFrame({'IDs': AIDs,
                   'Values': AValues})

BIDs = np.random.choice(AIDs, size=30)
BValues = np.random.randint(1000, 3000, size=30)
Differences = np.zeros(30)
dfB = pd.DataFrame({'IDs': BIDs,
                    'Values': BValues,
                    'Differences': Differences})

需求:为dfB的每一行,找到dfA中相同IDs对应的Values值,用该值减去dfB自身的Values值,将结果存入dfB的Differences列。

解决方案

方法一:映射字典(高效简洁)

通过构建IDs到Values的映射字典,快速匹配计算差值:

# 从dfA创建ID到对应Values的映射字典
id_value_map = dfA.set_index('IDs')['Values'].to_dict()

# 计算差值并赋值给Differences列
dfB['Differences'] = dfB['IDs'].map(id_value_map) - dfB['Values']

方法二:DataFrame合并

通过merge合并两个DataFrame后计算差值:

# 合并dfB和dfA,保留匹配的ID数据
merged_data = dfB.merge(dfA, on='IDs', suffixes=('_B', '_A'))

# 计算差值并更新dfB的Differences列
dfB['Differences'] = merged_data['Values_A'] - merged_data['Values_B']

示例效果

假设dfA和初始dfB的数据如下:

dfA数据

indexIDsValues
0y51622
1x51294
2x11722
3x31108
4y11499
5x41123
6y42866
7y31075
8y21767
9x22748

初始dfB数据

indexIDsValuesDifferences
0y2480.0
1y4470.0
2y1220.0
3x2860.0
............

计算后,dfB的Differences列结果为:

indexDifferences
01719
12819
21477
32662
......

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 22:24:56