Find euclidean distance from a point to rows in pandas dataframe

前端 未结 2 1730
南笙
南笙 2020-12-19 07:32

i have a dataframe

id    lat      long
1     12.654   15.50
2     14.364   25.51
3     17.636   32.53
5     12.334   25.84
9     32.224   15.74
2条回答
  •  谎友^
    谎友^ (楼主)
    2020-12-19 08:05

    Use vectorized approach

    In [5463]: (df[['lat', 'long']] - np.array(L1)).pow(2).sum(1).pow(0.5)
    Out[5463]:
    0     8.369161
    1    18.523838
    2    26.066777
    3    18.632320
    4    22.546096
    dtype: float64
    

    Which can also be

    In [5468]: df['distance'] = df[['lat', 'long']].sub(np.array(L1)).pow(2).sum(1).pow(0.5)
    
    In [5469]: df
    Out[5469]:
       id     lat   long   distance
    0   1  12.654  15.50   8.369161
    1   2  14.364  25.51  18.523838
    2   3  17.636  32.53  26.066777
    3   5  12.334  25.84  18.632320
    4   9  32.224  15.74  22.546096
    

    Option 2 Use Numpy's built-in np.linalg.norm vector norm.

    In [5473]: np.linalg.norm(df[['lat', 'long']].sub(np.array(L1)), axis=1)
    Out[5473]: array([  8.36916101,  18.52383805,  26.06677732,  18.63231966,   22.5460958 ])
    
    In [5485]: df['distance'] = np.linalg.norm(df[['lat', 'long']].sub(np.array(L1)), axis=1)
    

提交回复
热议问题