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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:45:00