Как найти ближайших соседей точек в фрейме данных из другого фрейма данных - PullRequest
1 голос
/ 27 марта 2019

Я хочу найти k ближайших соседей всех точек в фрейме данных A из фрейма данных B.Как это выполнимо?Кажется, sklearn.neighbors.NearestNeighbors принимает только один набор данных и только одну точку запроса.

Например:

samples = [[0., 0., 0.], [0., .5, 0.], [1., 1., .5]]
from sklearn.neighbors import NearestNeighbors
neigh = NearestNeighbors(n_neighbors=1)
neigh.fit(samples) 

print(neigh.kneighbors([[1., 1., 1.]])) 

из Документация Python

Я хочу иметь фрейм данных с более чем одной точкой запроса вместо [[1., 1., 1.]]

PS Я хочу, чтобы метрика была Mahalanobis, которую sklearn.neighbors.KDTree не принимает, а scipy.spatial.KDTree даже не имеетлюбой метрический вариант.

1 Ответ

3 голосов
/ 27 марта 2019
import pandas as pd
from scipy.spatial import KDTree

dataA = pd.DataFrame(pd.np.random.rand(100, 100))
dataB = pd.DataFrame(pd.np.random.rand(100, 100))

kdB = KDTree(dataB.values)
print(kdB.query(dataA.values, k=3)[-1]) # k desired number of neighbors 
#returns indices of 3-neighbors for all rows/points in A
...