繁体   English   中英

如何在 pandas dataframe 中查找查询数据点的最近数据点?

[英]How to Find Closest data points for a query data point in a pandas dataframe?

我有一个包含 15 列的查询数据点,我有一个具有相同列 (15) 的 pandas 数据帧,我想找到数据帧中与我的查询数据点最接近的数据点。 有人可以指导我吗?

示例:查询数据点

[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 需要一个目标变量,所以需要你的帮助。谢谢!

您可以使用欧几里得距离或 L2Norm 来计算 dataframe 的每一行与查询点之间的距离。

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)

这给出了 output,

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

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

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

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

这给了你 output

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

查看这个问题的答案。

你可以试试:

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 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM