我正在尝试执行以下操作:
鉴于距离的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以有效的方式执行此操作。但是我什么都找不到?
自制代码也非常受欢迎! :)
谢谢!
答案 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']