给定:
df = pd.DataFrame(np.random.randint(0,100, size= (10,4)), columns=list('ABCD'))
df['category']= ['apple','orange','grape','berry','strawberry','banana','kiwi','lemon','lime','pear']
我想让用户选择一个类别,说“Apple”,然后让我的函数计算 Apple 和所有其他类别之间的曼哈顿距离,并返回 3 个最接近的值(最小差异)。我不确定如何编写调用数据框中列的函数,但这就是我所拥有的:
def Manhattan_d(category_name):
return df['A'][0]-df['A'][1]+df['B'][0],(df['B'][1])+df['C'][0]-df['C'][1]+df['D'][0]
最佳答案
您可以使用 apply
计算距离矩阵:
def distance(row):
cols = list('ABCD')
return (df[cols] - row[cols]).abs().sum(axis=1)
df.set_index('category', inplace=True)
dist = df.apply(distance, axis=1)
然后你可以使用nsmallest
为所需类别提取最接近的类别:
dist['apple'].nsmallest(4)
您要考虑 n = 4
,因为这里最接近的类别是 'apple'
,这是微不足道的。
关于python - 计算曼哈顿距离并返回最低的 3 个距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52615346/