计算曼哈顿距离并返回最低的3个距离

时间:2018-10-02 19:44:25

标签: python pandas dataframe

给出:

{
  "status": [
    {
      "Name": "Apple",
      "Pay": "1",
      "isMode": "0"
    },
    {
      "Name": "Banana",
      "Pay": "1",
      "isMode": "0"
    },
    {
      "Name": "Kiwi",
      "Pay": "1",
      "isMode": "1"
    },
    {
      "Name": "Fruits",
      "Pay": "1",
      "isMode": "1"
    },
    {
      "Name": "Basket",
      "Pay": "1",
      "isMode": "1"
    }
  ]
}

我希望用户选择一个类别,例如说“ Apple”,然后让我的函数计算Apple与所有其他类别之间的曼哈顿距离,并返回3个最接近的值(最小的差)。我不确定如何编写一个调用数据框中的列的函数,但这就是我所拥有的:

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

1 个答案:

答案 0 :(得分:1)

您可以使用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',这很简单。