У меня есть фрейм данных с двумя столбцами, которые содержат координаты долготы и широты:
импортировать панд как pd
values = {'Latitude': {0: 47.021503365600005,
1: 47.021503365600005,
2: 47.021503365600005,
3: 47.021503365600005,
4: 47.021503365600005,
5: 47.021503365600005},
'Longitude': {0: 15.481974060399999,
1: 15.481974060399999,
2: 15.481974060399999,
3: 15.481974060399999,
4: 15.481974060399999,
5: 15.481974060399999}}
df = pd.DataFrame(values)
df.head()
Теперь я хочу применить функцию скользящего окна к фрейму данных, который принимает долготу и широту (два столбца) одной строки и другой строки (размер окна 2), чтобы вычислить расстояние гаверсинуса.
def haversine_distance(x):
print (x)
df.rolling(2, axis=1).apply(haversine_distance)
Моя проблема в том, что я никогда не получаю все четыре значения Lng1, Lat1 (первая строка) и Lng2, Lat2 (вторая строка). Если я использую axis = 1, я получу Lng1 и Lat1 первой строки. Если я использую axis = 0, я получу Lng1 и Lng2 первой и второй строки, но только долготу.
Как я могу применить скользящее окно, используя две строки и два столбца? Примерно так:
def haversine_distance(x):
row1 = x[0]
row2 = x[1]
lng1, lat1 = row1['Longitude'], row1['Latitude']
lng2, lat2 = row2['Longitude'], row2['Latitude']
# do your stuff here
return 1
В настоящее время я выполняю этот расчет, соединяя фрейм данных с самим собой с помощью shift (-1), в результате чего все четыре координаты отображаются в одной строке. Но это должно быть возможно и с прокаткой. Другой вариант - объединить Lng и Lat в один столбец и применить к нему прокатку с осью = 0. Но ведь должен быть более простой способ?
shift(-1)
и применить вашу функцию к каждой строке - наиболее эффективный способ сделать это. Я не знаю способа применить функцию к скользящему окну сразу для нескольких столбцов. - person Ken Syme   schedule 20.11.2017