[英]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.