为了账号安全,请及时绑定邮箱和手机立即绑定

计算距离最低的曼哈顿距离返回类别

计算距离最低的曼哈顿距离返回类别

慕的地10843 2021-07-02 10:19:39
我正在寻找创建一个函数来计算选定类别与数据集中所有其他类别之间的曼哈顿距离。然后,该函数应返回与所选距离最小的 CATEGORY。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']下面的代码返回最小的 4 个距离,其中包括所选类别(距离 = 0;这是多余的,不需要)。我需要代码只返回最低的 3 个距离作为类别列表,第一个是最小的。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)dist['apple'].nsmallest(4)例如,如果选择了“Apple”,并且离苹果最近的三个距离是 Berry、Orange 和 Grape,则返回应该是这样的:["Berry", "Orange","Grape"]
查看完整描述

2 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

一种选择是使用功能cityblock的scipy.spatial.distance:


from scipy.spatial import distance


df.set_index('category', inplace = True)


>> df.apply(lambda x: distance.cityblock(x, df.loc['apple',:]), axis=1

        ).drop('apple', axis=1).nsmallest(4).index.values.tolist()


 ['strawberry', 'berry', 'kiwi', 'orange']

基本上,您可以获得从每一行到所选行的距离。然后删除包含所选标签的行并选择最小距离的索引。


查看完整回答
反对 回复 2021-07-06
  • 2 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号