Как применить функцию к групповому фрейму данных
С учетом фрейма данных df.
userid trip_id lat long
141.0 1.0 39.979547 116.306813
141.0 1.0 39.979558 116.306823
141.0 1.0 39.979575 116.306835
141.0 1.0 39.979587 116.306847
141.0 2.0 39.979603 116.306852
141.0 2.0 39.979612 116.306867
141.0 2.0 39.979627 116.306877
141.0 2.0 39.979635 116.306888
141.0 3.0 39.979645 116.306903
141.0 3.0 39.979657 116.306913
141.0 3.0 39.979670 116.306920
141.0 3.0 39.979682 116.306920
Я хочу рассчитать расстояние Винсенти для каждой группы фрейма данных.Фрейм данных сгруппирован в 2 столбца, т. е. (идентификатор пользователя, trip_id)
Я могу рассчитать расстояние Винсента для полного фрейма данных по заданному выражению
from geopy.distance import vincenty
df['lat_next'] = df['lat'].shift(-1)
df['long_next'] = df['long'].shift(-1)
df['Vincenty_distance'] = df.dropna().apply(lambda x: vincenty((x['lat'], x['long']), (x['lat_next'], x['long_next'])).meters, axis = 1)
df = df.drop(['lat_next','long_next'], axis=1)
Я хочу применить эту функцию к каждой группе, япопробуйте использовать это утверждение, но получили ошибку.
df['Vincenty_distance'] = df.dropna().groupby(['userid','trip_id']).apply(lambda x: vincenty((x['lat'], x['long']), (x['lat_next'], x['long_next'])).meters,axis=1)
Я ожидаю следующего результата.
userid trip_id lat long Vincenty_distance
141.0 1.0 39.979547 116.306813 2.563812
141.0 1.0 39.979558 116.306823 2.956183
141.0 1.0 39.979575 116.306835 2.332577
141.0 1.0 39.979587 116.306847 Nan
141.0 2.0 39.979603 116.306852 2.334821
141.0 2.0 39.979612 116.306867 2.332577
141.0 2.0 39.979627 116.306877 1.695449
141.0 2.0 39.979635 116.306888 Nan
141.0 3.0 39.979645 116.306903 1.871784
141.0 3.0 39.979657 116.306913 1.982752
141.0 3.0 39.979670 116.306920 2.220685
141.0 3.0 39.979682 116.306920 Nan