我有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个数据帧,以计算第一个数据帧的每一行的距离,第二个数据帧的项数小于其...的距离...
我正在尝试套用地图功能,但无法通过2个数据帧执行它;我需要合并它们吗?
答案 0 :(得分:1)
这对您有用吗? 只需校正距离功能
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]
修改功能以处理功能,也可以使用lambda函数过滤酒店
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)