Python 从距离矩阵实现k近邻?

Python 从距离矩阵实现k近邻?,python,pandas,Python,Pandas,我正在努力做到以下几点: 给定一个距离的数据帧,我想确定每个元素的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 距离不一定是对称的。 我在想,一定有什么地方可以使用熊猫数据帧以有效的方式实现这一点。但我什么也找不到 自制代码也很受欢迎!:) 谢谢大家! 在我看来,我只需为每行找到n+1最小的数字/距离/邻居,然后删除0,这将为您提供n数字/距

我正在努力做到以下几点:

给定一个距离的数据帧,我想确定每个元素的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
距离不一定是对称的。 我在想,一定有什么地方可以使用熊猫数据帧以有效的方式实现这一点。但我什么也找不到

自制代码也很受欢迎!:)


谢谢大家!

在我看来,我只需为每行找到
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']

让我知道我的代码是否有效(见下文):谢谢它起作用了!我现在很忙!我能多花点时间给你解释一下吗?如果你喜欢我的答案,并且感到满意,并且它实现了你想要的,请随意勾选它并投票!因为它真的帮助了我@阿披实!非常感谢你的帮助。我在上面打了个勾,然后试着投票。我会给你一个解释,给我一些时间!我现在正在参与另一个项目。这非常有帮助。谢谢为什么需要将其转置,以及它在哪里排除0?请给我一些时间,我将解释!涉及另一个问题