Python 3.x 使用一个函数比较两个数据帧(无公共索引)
我有2个熊猫数据框,餐厅:Python 3.x 使用一个函数比较两个数据帧(无公共索引),python-3.x,pandas,Python 3.x,Pandas,我有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.60377
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个数据帧执行它;我需要合并它们吗?这对您有用吗?
只需要校正距离的函数
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]
hotels=pd.DataFrame([43.599503,1.440678,'Le Filochard'],
[43.602369,1.447368,“勒华莱士”],
[43.603838,1.435186,'Chez Tonton,PastisÔMaître'],
列=['Lat','Long','Name'])
餐厅=pd.数据框([[43.603779,1.444004,“洛佩拉大酒店”],
[43.599482,1.441207,'Hôtel Garonne'],
[43.549924,1.499821,‘宜必思风格’],
列=['Lat','Long','Name'])
hotels['neared resarants']=hotels.apply(lambda h:list(restaurants[((restaurants.Lat-h.Lat)**2+(restaurants.Long-h.Long)**2)你能展示你的代码吗?也许你可以在这里找到灵感:谢谢Sergey,它直接使用公式工作得很好。但是我不能用我的函数距离((xlat,xlong),(yla,ylong)执行相同的操作:我正在尝试这个:code
df_hotel['neared Resto']=df_hotel.apply(lambda h:list)(df_Resto[(distance((df_Resto.Lat,h.Lat),(df_Resto.Long,h.Long))工作了!!我的头痛正在慢慢减轻。非常感谢。
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)