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