Рассчитайте Манхэттенское Расстояние и верните самые низкие 3 расстояния - PullRequest
0 голосов
/ 02 октября 2018

Учитывая:

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]

1 Ответ

0 голосов
/ 02 октября 2018

Вы можете использовать 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', что тривиально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...