Pandas Применить с несколькими столбцами в качестве ввода - PullRequest
0 голосов
/ 22 марта 2020

Для кадра данных, который имеет 4 столбца координат (долгота, широта), я хотел бы создать 5-й столбец, который имеет расстояние между обоими местами для каждого столбца, ниже иллюстрирует это:

 dict = [{'x1': '1','y1': '1','x2': '3','y2': '2'},
 {'x1': '1','y1': '1','x2': '3','y2': '2'}]
 data = pd.DataFrame(dict)

Как результат, который я хотел бы получить:

dict1 = [{'x1': '1','y1': '1','x2': '3','y2': '2','distance': '2.6'},
{'x1': '1','y1': '1','x2': '3','y2': '2','distance': '2.9'}]   
data2 = pd.DataFrame(dict)

Где расстояние вычисляется с использованием geopy.distance import great_circle:

Это то, что я пробовал:

data [ 'distance'] = data [['x1', 'y1', 'x2', 'y2']]. apply (лямбда x1, y1, x2, y2: great_circle (x1, y1, x2, y2). мили, axis = 1)

Но это приводит к ошибке типа:

TypeError: () отсутствует 3 обязательных позиционных аргумента: 'y1', 'x2' и 'y2'

Любая помощь приветствуется.

1 Ответ

1 голос
/ 22 марта 2020

Это потому, что лямбда-функция может просматривать только операнд data[['x1','y1','x2','y2']], поэтому вы должны изменить ее следующим образом. Надеюсь, это поможет!

data['distance']=data[['x1','y1','x2','y2']].apply(lambda df: great_circle(df['x1'],df['y1'],df['x2'],df['y2']).miles, axis=1)
...