从距离矩阵实现k个最近的邻居?

时间:2018-06-29 11:56:30

标签: python pandas

我正在尝试执行以下操作:

鉴于距离的dataFrame,我想确定每个元素的k个最近邻居。 示例:

  A B C D
A 0 1 3 2
B 5 0 2 2
C 3 2 0 1
D 2 3 4 0

如果k = 2,则应返回:

A: B D
B: C D
C: D B
D: A B

距离不一定是对称的。 我认为必须在某处使用Pandas DataFrames以有效的方式执行此操作。但是我什么都找不到?

自制代码也非常受欢迎! :)

谢谢!

1 个答案:

答案 0 :(得分:1)

我的观察方式是,我只需为每行找到n + 1个最小的数字/距离/邻居,然后删除0,这将为您提供n个数字/距离/邻居。请记住,如果距离为零,则代码将无法工作!只能将对角线设为0。

import pandas as pd
import numpy as np



X = pd.DataFrame([[0, 1, 3, 2],[5, 0, 2, 2],[3, 2, 0, 1],[2, 3, 4, 0]])

X.columns = ['A', 'B', 'C', 'D']
X.index = ['A', 'B', 'C', 'D']

X = X.T

for i in X.index:

    Y = X.nsmallest(3, i)
    Y = Y.T
    Y = Y[Y.index.str.startswith(i)]
    Y = Y.loc[:, Y.any()]

    for j in Y.index:
        print(i + ": ", list(Y.columns))

打印输出:

A:  ['B', 'D']
B:  ['C', 'D']
C:  ['D', 'B']
D:  ['A', 'B']