【问题标题】:how to custom sort in pandas dataframe based on two columns?如何根据两列在熊猫数据框中自定义排序?
【发布时间】:2021-04-16 13:14:11
【问题描述】:

我有一个数据框:-

91745   52.087569   4.893148
430245  52.045561   4.948235
435274  52.031570   4.840220
437177  52.086108   4.883128
446128  52.091580   4.964827
453169  52.024054   4.869313
458566  52.168720   4.989130
473877  52.128700   4.968660

我有一个元组说 x = (52.0878, 4.89323)。我想计算df的x和(纬度,经度)之间的距离并按升序排序。

为了计算我会做的距离

   df_lat_long = (45.7597, 4.8422) 
   x = (48.8567, 2.3508)
   distance = haversine(df_lat_long, x)

我想按距离对 df 进行排序

【问题讨论】:

    标签: python pandas dataframe sorting geolocation


    【解决方案1】:

    使用sklearn's haversine计算距离数组,然后np.argsortiloc

    from sklearn.metrics.pairwise import haversine
    
    distance = haversine(df[['lat','lon']], x)
    
    df.iloc[np.argsort(distance)]
    

    【讨论】:

    • 感谢您的回答。我正在使用 scikit-learn==0.20.0 并且无法导入可能在该版本中不可用。由于其他原因,我也无法升级 scikit-learn。可以使用 hasrsine from haversine import haversine 或任何其他方式完成相同的操作吗?
    • sklearn 的半正弦来自 0.22.2。您可以查看 this question 以获得允许矢量化的实现。
    【解决方案2】:

    你可以这样使用它:

    from sklearn.metrics.pairwise import haversine
    df["distance"] = ""
    df["distance"] = df.agg(lambda x: haversine((x["lat"],x["long"]), x), axis=1)
    

    【讨论】:

    • 和我的回答有什么不同?另外,在这种情况下,您不应使用 agg,因为 sklearn 的 hasrsine 是矢量化的,而您的代码不是。
    猜你喜欢
    • 2013-10-12
    • 2021-10-14
    • 1970-01-01
    • 2012-11-30
    • 2017-08-21
    • 2019-10-10
    • 2023-03-16
    • 2014-12-29
    相关资源
    最近更新 更多