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

如何按test_num和el_num匹配,将diff.value与df.value相加并更新df.value

按test_num和el_num匹配,将diff.value与df.value相加并更新df.value

原始DataFrame df

test_num  el_num  file_num  value   fail
429         4      1         0   3.36  False
430         4      1         1   3.29  False
431         4      1         2   3.29  False
432         4      1         3   3.26  False
433         4      1         4   3.28  False
434         4      1         5   3.26  False
435         4      1         6   3.27  False
436         4      1         7   3.26  False
437         4      1         8   3.26  False
438         4      1         9   3.18  False
439         4      1        10   3.24  False
440         4      1        11   3.27  False
441         4      1        12   3.32  False
429         5      2         0   3.36  False
430         5      2         1   3.29  False
431         5      2         2   3.29  False
432         5      2         3   3.26  False
433         5      2         4   3.28  False
434         5      2         5   3.26  False
435         5      2         6   3.27  False
436         5      2         7   3.26  False
437         5      2         8   3.26  False
438         5      2         9   3.18  False
439         5      2        10   3.24  False
440         5      2        11   3.27  False
441         5      2        12   3.32  False

原始DataFrame diff

value  el_num  test_num
198   0.43       1         5
204   0.43       2         5
210   0.46       3         5
216   0.42       4         5
222   0.41       5         5
228   0.43       6         5
234   0.46       7         5
240   0.43       8         5
246   0.44       9         5
252   0.41      10         5
258   0.19      11         5

解决方法

方法一:通过merge匹配计算

先按test_num和el_num合并两个DataFrame,计算更新后的value,再回写原df:

# 合并df与diff,保留df所有行,匹配不到diff的行暂存空值
merged = df.merge(diff, on=['test_num', 'el_num'], how='left', suffixes=('', '_diff'))
# 计算新value:原value加diff的value,匹配不到则加0
merged['value'] = merged['value'] + merged['value_diff'].fillna(0)
# 移除临时列,更新原df
df = merged.drop(columns=['value_diff'])

方法二:用索引映射快速匹配

将diff转为以test_num和el_num为复合索引的Series,直接映射到df中计算:

# 把diff转换成复合索引的Series
diff_series = diff.set_index(['test_num', 'el_num'])['value']
# 用df的复合索引匹配diff的值,匹配不到填0,再与原value相加
df['value'] += df.set_index(['test_num', 'el_num']).index.map(diff_series.get).fillna(0)

效果说明

两种方法都会让df中test_num和el_num与diff匹配的行,value加上对应diff的数值;匹配不到的行(比如df中test_num=4的所有行)value保持不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:33:08