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
相关产品推荐
相关产品推荐

