如何根据两列在熊猫数据框中自定义排序?

Posted

技术标签:

【中文标题】如何根据两列在熊猫数据框中自定义排序?【英文标题】: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 进行排序

【问题讨论】:

【参考方案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 是矢量化的,而您的代码不是。

以上是关于如何根据两列在熊猫数据框中自定义排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java 中自定义排序列表

如何按字符串索引上的自定义顺序对熊猫数据框进行排序

根据列名重新排序熊猫数据框中的列[重复]

根据列名重新排序熊猫数据框中的列[重复]

根据列名重新排序熊猫数据框中的列[重复]

根据列名重新排序熊猫数据框中的列[重复]