Сравнение двух фреймов данных с функцией (без общих индексов) - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть 2 фрейма данных панд, рестораны:

     Lat        Long             Name
0    43.599503  1.440678      Le Filochard
1    43.602369  1.447368      Le Wallace
2    43.603838  1.435186      Chez Tonton, Pastis Ô Maître

и отели:

      Lat      Long             Name
0   43.603779  1.444004         Grand Hôtel de l'Opéra
1   43.599482  1.441207         Hôtel Garonne
2   43.549924  1.499821         Ibis Styles

И 1 функция расстояния (источник, пункт назначения) с источником = (широта, длина)Координаты.

Я пытаюсь применить функцию к 2 фреймам данных, чтобы вычислить для каждой строки первого фрейма данных номер элемента из второго фрейма данных, для которого расстояние меньше 0,2 ...

Я пытаюсь применить функцию карты, но мне не удается выполнить ее с 2 кадрами данных;мне нужно объединить их?

1 Ответ

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

Будет ли это работать для вас?Просто нужно скорректировать функцию для расстояния

hotels=pd.DataFrame([[43.599503, 1.440678, 'Le Filochard'],
                     [43.602369, 1.447368, 'Le Wallace'],
                     [43.603838, 1.435186, 'Chez Tonton, Pastis Ô Maître']],
                   columns=['Lat', 'Long', 'Name'])
restaurants=pd.DataFrame([[43.603779, 1.444004, "Grand Hôtel de l'Opéra"],
                          [43.599482, 1.441207, 'Hôtel Garonne'],
                          [43.549924, 1.499821, 'Ibis Styles']],
                         columns=['Lat', 'Long', 'Name'])
hotels['Nearby Resaurants'] = hotels.apply(lambda h: list(restaurants[((restaurants.Lat-h.Lat)**2+(restaurants.Long-h.Long)**2)<0.005].Name), axis=1)
print(hotels)
            Lat      Long                          Name  \
0  43.599503  1.440678                  Le Filochard   
1  43.602369  1.447368                    Le Wallace   
2  43.603838  1.435186  Chez Tonton, Pastis Ô Maître   

                         Nearby Resaurants  
0  [Grand Hôtel de l'Opéra, Hôtel Garonne]  
1  [Grand Hôtel de l'Opéra, Hôtel Garonne]  
2  [Grand Hôtel de l'Opéra, Hôtel Garonne]

РЕДАКТИРОВАТЬ:

Модификация для обработки функции, фильтрации отелей также с помощью функции лямбда

def distance(X,Y):
    return((X[0]-X[1])**2+(Y[0]-Y[1])**2)

hotels['Nearby Resaurants'] = hotels.apply(lambda h: list(restaurants.loc[restaurants.apply(lambda r: distance((r.Lat,h.Lat),(r.Long,h.Long))<0.005, axis=1)].Name), axis=1)
print(hotels)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...