2015-06-21 5 views
3

У меня есть dataframe с столбцом местоположения, который содержит латы, длинные местоположение следующегоКак использовать геополитическое расстояние между столбцами данных?

deviceid        location   
1102ADb75  [12.9404578177, 77.5548244743] 

Как получить расстояние между последовательными рядами, используя функцию vicenty geopy в? Я попытался следующий код

from geopy.distance import vincenty 
vincenty(df['location'].shift(-1), df['location']).miles 

возвращает следующие ошибки - TypeError: __new __() принимает не более 4 аргументов (5 заданных)

EDIT - где ДФ является Панды dataframe содержащий DeviceId & Расположение колонок, как показано выше также

print type(df) 
class 'pandas.core.frame.DataFrame' 
+0

что именно 'df' в вашем случае? добавьте, что именно к описанию вопроса, поскольку 'dataframe' немного расплывчато, например. print (df, type (df)) было бы хорошо – dm295

+1

Отредактировано, в любом случае 1-я строка говорит, что у меня есть dataframe – Nishad

+0

ok, я не знал, что это кадр данных Pandas; лучше быть ясным и конкретным, задавая вопрос – dm295

ответ

3

Based на geopy's github вы должны пройти два кортежа функции vincenty:

>>> from geopy.distance import vincenty 
    >>> point_a = (41.49008, -71.312796) 
    >>> point_b = (41.499498, -81.695391) 
    >>> print(vincenty(point_a, point_b).miles) 
    538.3904451566326 

EDIT:

import pandas as pd 
from geopy.distance import vincenty 

data = [[101, [41.49008, -71.312796]], 
     [202, [41.499498, -81.695391]]] 
df = pd.DataFrame(data=data, columns=['deviceid', 'location']) 

print df 
>>> deviceid     location 
>>> 0  101 [41.49008, -71.312796] 
>>> 1  202 [41.499498, -81.695391] 

print vincenty(df['location'][0], df['location'][1]).miles 
>>> 538.390445157 
+1

Я знаю, поэтому вопрос, не способный понять, как это сделать – Nishad