如何为数据帧中的查询数据点查找最近的数据点?

2024-09-29 20:26:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个具有15列的查询数据点,我有一个具有相同列(15)的熊猫数据框,我想找到数据框中与我的查询数据点最近的数据点。有人能在这方面指导我吗

例如: 查询数据点

[1, 2, 3, 4]

df

1  3  5  6
2  7  9  1
2  8  1  8
5  4  9  0
2  4  6  7

在这里,下面的行是最接近的,这与我希望检索到距离查询点最近的前n个数据点的方式相同

1  3  5  6
2  4  6  7

我尝试过聚类,但它太复杂了,我无法理解,KNN需要一个目标变量,所以需要您的帮助。谢谢


Tags: 数据距离目标df方式指导knn过聚类
2条回答

您可以使用欧几里德距离或L2Norm来计算数据帧的每一行与查询点之间的距离

df = pd.DataFrame([[1,  3,  5,  6],
[2,  7,  9,  1],
[2,  8,  1,  8],
[5,  4,  9,  0],
[2,  4,  6,  7]])

vec = [1, 2, 3, 4]

dist = df.sub(vec, axis=1).pow(2).sum(axis=1).pow(.5)

这就给出了输出

0    3.000000
1    8.426150
2    7.549834
3    8.485281
4    4.795832
dtype: float64

您可以选择最短的n个距离,这将为您提供距查询点最近的n个数据点的位置

或者您可以使用np.linlag.norm

dist = np.linalg.norm(source.to_numpy() - vec, axis=1)

这将为您提供输出

array([3.        , 8.42614977, 7.54983444, 8.48528137, 4.79583152])

请查看此question的答案

您可以尝试:

query_point = [1, 2, 3, 4]
n = 2

n_closest_points = df.loc[(df - query_point).pow(2).sum(axis=1).nsmallest(n).index]

给予

   0  1  2  3
0  1  3  5  6
4  2  4  6  7

我们通过链式减法(广播)、平方(pow)和求和(sum)得到每行和query_point之间的平方距离之和。然后,通过获取距离最小的行(nsmallest),我们需要n最近的行。然后给出一个序列,其值为平方距离,索引指示所需行,因此我们获取其索引并将其放入原始df(.loc

相关问题 更多 >

    热门问题