2016-10-04 4 views
0

パンダ複数の引数で、私は以下のようなデータフレームを持っていると私は4つの入力を持つ半正矢式を使用して、複数のGPS出張で2点間の距離を計算しようとしています。基本的にtrip_idをグループ化し、haversine式を適用します。データフレームはgroupby.applyのpython

私はdf['distance'] = df.groupby('trip_id').apply(haversine, df.lng, df.lat, df.lnglag_, df.latlag_)のようなものが働くだろうと思っていたが、私はTypeError: haversine() takes 4 positional arguments but 5 were givenを取得します。ここで何が起こっているかについてのアイデアは?

latlag_  lnglag_  trip_id lat  lng 
0 -7.11873 113.72512 NaN  NaN  NaN 
1 -7.11873 113.72500 17799.0 -7.11873 113.72512 
2 -7.11870 113.72476 17799.0 -7.11873 113.72500 
3 -7.11870 113.72457 17799.0 -7.11870 113.72476 
4 -7.11874 113.72444 17799.0 -7.11870 113.72457 

ここで、haversine式は私がWebから入手したものです。

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(math.radians, [lon1, lat1, lon2, lat2]) 
    # haversine formula 
    dlon = lon2 - lon1 
    dlat = lat2 - lat1 
    a = math.sin(dlat/2)**2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon/2)**2 
    c = 2 * math.asin(math.sqrt(a)) 
    km = 6367 * c 
    m = km/1000 
    return m 

答えて

0

私が使用するnumpyのベクトル化法など

import numpy as np 
np.vectorize(haversine)(df.lng, df.lat, df.lnglag_, df.latlag_) 
あり
関連する問題