Индекс возврата после расчета метрики расстояния - PullRequest
0 голосов
/ 27 сентября 2018

Учитывая DF с 4 функциями и 1 индексным столбцом:

df = pd.DataFrame(np.random.randint(0,100, size= (100,4)), columns=list('ABCD'))
df['index'] = range(1, len(df) + 1)

Я хочу рассчитать манхэттенское расстояние с учетом ввода от пользователя.Входные данные пользователя будут представлены как a, b, c, d.Функция определена ниже.

def Manhattan_d(a,b,c,d):

    return (a - df['A']) + (b -df['B']) + (c - df['C']) + (d - df['D'])

Когда ответ возвращается мне, он появляется в виде списка.Теперь я хочу найти минимальное возвращаемое мне значение и связать его с индексным номером, откуда оно.

Если я верну (мин (формула)), я получу вывод одного числа иЯ не могу найти его по индексу, из которого он был изначально.Если это проще, индекс представляет категорию.Поэтому мне нужно найти категорию с минимальным выводом после применения формулы.

Надеюсь, это понятно.

1 Ответ

0 голосов
/ 27 сентября 2018

Возможно, лучший подход - применить манхэттенское расстояние к каждой строке кадра данных.В этот момент вы можете использовать .idxmin(), чтобы найти индекс точки в исходном кадре данных, который наиболее похож (имеет наименьшее расстояние до Манхэттена) на точку a, b, c, d, которой вы подали функцию.

def Manhattan_d(a,b,c,d, df):
    return df.apply(lambda row:abs(row['A']-a)+abs(row['B']-b)+abs(row['C']-c)+abs(row['D']-d), axis=1).idxmin()

Примечание: Манхэттенское расстояние требует абсолютного значения разницы, которую я включил.

Другое примечание: как правило, рекомендуется передавать все переменные в функцию, поэтому я включилdf в качестве входных данных для вашей функции.

Другая возможность заключается в использовании существующих реализаций, таких как DistanceMetric класс из Scikit-learn.

...