给定:
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'
这是微不足道的。