pandas如何查找df1与df2列匹配的最近值并返回对应Sr和位置
问题修复方案
你原有代码的核心问题是在apply逻辑中,处理df2每一行的W列时,错误的用df1对应列和df2整个T列做差值计算,而非和当前行对应的单个T值计算,导致返回的最小索引完全不符合预期。
正确实现代码
import pandas as pd df1 = pd.DataFrame({ 'Sr':[1000, 1002, 1004, 1009], 'W1':[20.1, 20.3, 19.1, 18.5], 'W2':[45.155, 45.180, 19.115, 19.126], 'W3':[20, 22, 19, 18] }) df2 = pd.DataFrame({ 'W':["W1", "W2", "W3"], 'T':[20.2, 19.119, 18.1] }) # 逐行匹配逻辑 def match_nearest(row): # 取当前行对应的匹配列和目标值 col = row['W'] target = row['T'] # 计算差值绝对值的最小索引 min_index = df1[col].sub(target).abs().idxmin() # 返回对应的Sr和Pos(Pos为df1中的索引位置) return pd.Series([df1.loc[min_index, 'Sr'], min_index], index=['sr', 'Pos']) # 批量赋值 df2[['sr', 'Pos']] = df2.apply(match_nearest, axis=1) print(df2)
运行输出结果
W T sr Pos 0 W1 20.200 1000 0 1 W2 19.119 1004 2 2 W3 18.100 1009 3
注:W1列的20.1、20.3和目标值20.2的差值绝对值相同,默认返回第一个出现的最小项,若有特殊取值需求可自行调整判断逻辑。
内容的提问来源于stack exchange,提问作者OO7
相关产品推荐
相关产品推荐

