Python 如何计算熊猫和列表之间的欧几里德距离?

Python 如何计算熊猫和列表之间的欧几里德距离?,python,pandas,scipy,Python,Pandas,Scipy,我有一个熊猫数据帧,我试图用一个固定的值计算所有的欧几里德距离,并找到最短的距离 我的数据帧“货币”: 我的列表中的示例值[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-dimensiona

我有一个熊猫数据帧,我试图用一个固定的值计算所有的欧几里德距离,并找到最短的距离

我的数据帧“货币”:

我的列表中的示例值[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.]]
你能告诉我怎么修吗


谢谢

currency.bc.values似乎提供了元组的1d numpy数组,但cdist需要一个2d numpy数组。您可以使用np.array([*currency.bc.values]将其转换为2d数组

请参见下面的示例

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.]]

你的欧几里得公式是什么?还有,你想找出哪几点之间的距离?非常感谢!最后一个小问题,也是求索引的解决方案?“也是求索引的解决方案”什么索引?我需要结果的索引来提取最小值;距离=cdist([l['bc']],currency.bc.values.tolist(),'euclidean')distance_min=list(distance.min())多谢!np.argmin(距离)。再次感谢!
[[10. 10.]]
[[10. 10.]]