У меня есть следующие два кадра данных (сокращенно):
df1
day Transmitter_ID Species Lat Lng Date
4 A69-1601-27466 Golden perch -35.495479100000004 144.45295380000002 13/08/2015
5 A69-1601-27466 Golden perch -35.495479100000004 144.45295380000002 14/08/2015
6 A69-1601-27466 Golden perch -35.495479100000004 144.45295380000002 15/08/2015
7 A69-1601-27466 Golden perch -35.495479100000004 144.45295380000002 16/08/2015
8 A69-1601-27466 Golden perch -35.5065473 144.4488804 17/08/2015
8 A69-1601-27466 Golden perch -35.495479100000004 144.45295380000002 17/08/2015
9 A69-1601-27466 Golden perch -35.5065473 144.4488804 18/08/2015
10 A69-1601-27466 Golden perch -35.5065473 144.4488804 19/08/2015
11 A69-1601-27466 Golden perch -35.5065473 144.4488804 20/08/2015
12 A69-1601-27466 Golden perch -35.5065473 144.4488804 21/08/2015
13 A69-1601-27466 Golden perch -35.5065473 144.4488804 22/08/2015
14 A69-1601-27466 Golden perch -35.5065473 144.4488804 23/08/2015
15 A69-1601-27466 Golden perch -35.5065473 144.4488804 24/08/2015
rivergps_df
Lng Lat River
151.7753278 -32.90526725 HUNTER RIVER
151.77526830000002 -32.90610052 HUNTER RIVER
151.77526830000002 -32.90752299 HUNTER RIVER
151.77526830000002 -32.90758849 HUNTER RIVER
151.775397 -32.90977754 HUNTER RIVER
151.7754468 -32.91062396 HUNTER RIVER
151.775578 -32.91202941 HUNTER RIVER
151.77578799999998 -32.9142797 HUNTER RIVER
151.7758178 -32.91459931 HUNTER RIVER
151.77586340000002 -32.91508789 HUNTER RIVER
151.7764116 -32.91645856 HUNTER RIVER
151.7765776 -32.91687345 HUNTER RIVER
151.77719040000002 -32.91861786 HUNTER RIVER
У меня также есть функция haversine, которая принимает пару lat, lng и возвращает расстояние между двумя парами
def haversine(lon1, lat1, lon2, lat2):
"""
Calculate the great circle distance between two points
on the earth (specified in decimal degrees)
"""
# convert decimal degrees to radians
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
# haversine formula
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
c = 2 * asin(sqrt(a))
r = 6371 # Radius of earth in kilometers. Use 3956 for miles
То, что я хочу сделать с двумя фреймами данных:
Взять каждый lng / lat из df1 и для каждой точки применить функцию haversine для всего диапазона lng / lat из rivergps_df
Вернуть индекс rivergps_df, где был найден минимум для функции haversine
Добавить этот индекс rivergps_df к df1
Так что я имею в виду для первой точки в df1 -35.495479100000004, 144.45295380000002, Iхотите применить к нему функцию haversine как lon1, lat1 против lon2, lat2, где lon2, lat2 - все точки, которые существуют в rivergps_df.Затем я хочу найти минимум, возвращаемый функцией haversine, добавить его в df1 и перейти к следующей точке в df1.
Как бы я это сделал?