Как рассчитать евклидово расстояние между пандами и списком? - PullRequest
0 голосов
/ 19 января 2019

У меня есть кадр данных pandas, и я пытаюсь вычислить все евклидовы расстояния с фиксированным значением и найти кратчайшее расстояние.

Мой фрейм данных "валюта":

        Stype   h  line        ...            y    y2                bc
45   currency  38    13        ...         1344  1382  (1731.0, 1363.0)
46   currency  38    13        ...         1343  1381  (2015.0, 1362.0)
47   currency  39    13        ...         1342  1381  (2267.5, 1361.5)
60   currency  39    15        ...         2718  2757   (488.0, 2737.5)
61   currency  39    15        ...         2717  2756   (813.5, 2736.5)
62   currency  39    15        ...         2718  2757  (1332.5, 2737.5)
63   currency  40    15        ...         2716  2756  (1821.5, 2736.0)
64   currency  39    15        ...         2715  2754  (2286.5, 2734.5)
68   currency  39    17        ...         2874  2913  (2287.5, 2893.5)
162  currency  30    22        ...         3311  3341  (1104.5, 3326.0)

пример значения в моем списке [l ['bc']]

[(2126.5, 2657.0)]

Мой код:

for l in label_dic:
    print('bc:', [l['bc']])
    print(cdist([l['bc']], currency.bc.values, 'euclidean'))

Моя проблема:

ValueError: XB must be a 2-dimensional array.

Я проверил свою функцию:

print(cdist([l['bc']], [l['bc']], 'euclidean'))
Result: [[0.]]

Можете ли вы объяснить мне, как это исправить?

Спасибо

1 Ответ

0 голосов
/ 19 января 2019

currency.bc.values, похоже, дает массив из 1d numpy, но cdist нужен массив 2d.вы можете преобразовать его в 2d массив, используя np.array ([* currency.bc.values])

, см. пример ниже

from scipy.spatial import distance
import pandas as pd
import numpy as np

mypoint = [(0, 0)]
df = pd.DataFrame({'coord1': [(0,10), (10,0)]})
#option 1    
print(distance.cdist(mypoint , np.array([*df.coord1.values]), 'euclidean'))
#option2 
print(distance.cdist(mypoint , df.coord1.values.tolist(), 'euclidean'))

результаты в

[[10. 10.]]
[[10. 10.]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...