我有2个数据框正在使用。一个人有一堆位置和坐标(经度,纬度)。另一个是天气数据集,其中包含来自世界各地气象站的数据及其各自的坐标。我正在尝试将最近的气象站链接到数据集中的每个位置。气象站名称和我的位置名称不匹配。
我只想通过最接近的坐标将它们链接起来,也不知道从哪里开始。
我在想一些使用
np.abs((location['latitude']-weather['latitude'])+(location['longitude']-weather['longitude'])
每个例子
位置…
Location Latitude Longitude Component \ A 39.463744 -76.119411 Active B 39.029252 -76.964251 Active C 33.626946 -85.969576 Active D 49.286337 10.567013 Active E 37.071777 -76.360785 Active
天气…
Station Code Station Name Latitude Longitude US1FLSL0019 PORT ST. LUCIE 4.0 NE 27.3237 -80.3111 US1TXTV0133 LAKEWAY 2.8 W 30.3597 -98.0252 USC00178998 WALTHAM 44.6917 -68.3475 USC00178998 WALTHAM 44.6917 -68.3475 USC00178998 WALTHAM 44.6917 -68.3475
输出将是位置数据帧上的新列,且站名最匹配
但是,我不确定如何通过两者来完成此操作。任何帮助将不胜感激..
谢谢,斯科特
假设您有一个dist要最小化的距离函数:
dist
def dist(lat1, long1, lat2, long2): return np.abs((lat1-lat2)+(long1-long2))
对于给定的位置,您可以找到最近的车站,如下所示:
lat = 39.463744 long = -76.119411 weather.apply( lambda row: dist(lat, long, row['Latitude'], row['Longitude']), axis=1)
这将计算到所有气象站的距离。使用idxmin您可以找到最近的电台名称:
idxmin
distances = weather.apply( lambda row: dist(lat, long, row['Latitude'], row['Longitude']), axis=1) weather.loc[distances.idxmin(), 'StationName']
让我们将所有这些放到一个函数中:
def find_station(lat, long): distances = weather.apply( lambda row: dist(lat, long, row['Latitude'], row['Longitude']), axis=1) return weather.loc[distances.idxmin(), 'StationName']
现在,您可以通过将其应用于locations数据框来获取所有最近的测站:
locations
locations.apply( lambda row: find_station(row['Latitude'], row['Longitude']), axis=1)
输出:
0 WALTHAM 1 WALTHAM 2 PORTST.LUCIE 3 WALTHAM 4 PORTST.LUCIE