在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数据
| index | IDs | Values |
|---|---|---|
| 0 | y5 | 1622 |
| 1 | x5 | 1294 |
| 2 | x1 | 1722 |
| 3 | x3 | 1108 |
| 4 | y1 | 1499 |
| 5 | x4 | 1123 |
| 6 | y4 | 2866 |
| 7 | y3 | 1075 |
| 8 | y2 | 1767 |
| 9 | x2 | 2748 |
初始dfB数据
| index | IDs | Values | Differences |
|---|---|---|---|
| 0 | y2 | 48 | 0.0 |
| 1 | y4 | 47 | 0.0 |
| 2 | y1 | 22 | 0.0 |
| 3 | x2 | 86 | 0.0 |
| ... | ... | ... | ... |
计算后,dfB的Differences列结果为:
| index | Differences |
|---|---|
| 0 | 1719 |
| 1 | 2819 |
| 2 | 1477 |
| 3 | 2662 |
| ... | ... |
内容的提问来源于stack exchange,提问作者user19678327
相关产品推荐
相关产品推荐

