Я хочу создать функцию, которая вычисляет расстояние Манхэттена между выбранной категорией и всеми другими категориями в наборе данных.Функция должна затем вернуть КАТЕГОРИЮ с наименьшим расстоянием от выбранного.
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», а три самых низких расстояния от Apple былиЯгоды, апельсин и виноград, возвращение должно выглядеть так: ["Ягода", "Апельсин", "Виноград"]