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

Python如何根据距离值查找与指定ID最接近的3条观测记录

实现代码示例

你可以直接参考下面的可运行代码,每步都加了注释方便理解:

import pandas as pd

# 这里是构造你给出的示例DataFrame,实际使用时替换成你自己的DataFrame即可
df = pd.DataFrame({
    'Segment': [3,8,4,8,3,8,4],
    'Distance': [0.348, 0.439, 0.458, 0.284, 0.359, 0.563, 0.388],
    'ID': [1203, 1204, 1205, 1207, 1208, 1209, 1210]
})
# 如果你的ID列本身是字符串存储,加一行df['ID'] = df['ID'].astype(str)统一类型即可

def get_closest_3_records(input_id, df):
    # 第一步:获取输入ID对应的Distance值
    target_distance = df.loc[df['ID'] == int(input_id), 'Distance'].iloc[0]
    # 第二步:计算所有行的Distance和目标值的差值绝对值,存为临时列
    df['diff_abs'] = abs(df['Distance'] - target_distance)
    # 第三步:排除输入ID自身的记录,按差值从小到大排序,取前3条后删除临时列返回
    result = df[df['ID'] != int(input_id)].sort_values('diff_abs').head(3).drop('diff_abs', axis=1)
    return result

# 测试调用
output = get_closest_3_records('1203', df)
print(output)
运行结果和你给出的期望完全一致:
Segment  Distance    ID
4        3     0.359  1208
6        4     0.388  1210
3        8     0.284  1207

补充说明

  • 如果你实际的ID列是字符串类型,把代码里的int(input_id)直接改成input_id即可
  • 临时生成的差值列不会保留在返回结果和原DataFrame中,不影响原有数据结构
  • 该逻辑对大数据量也适用,排序效率Pandas已经做了内置优化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:45:02