如何根据两列在熊猫数据框中自定义排序?
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.argsort
和iloc
:
from sklearn.metrics.pairwise import haversine
distance = haversine(df[['lat','lon']], x)
df.iloc[np.argsort(distance)]
【讨论】:
感谢您的回答。我正在使用 scikit-learn==0.20.0 并且无法导入可能在该版本中不可用。由于其他原因,我也无法升级 scikit-learn。可以使用 hasrsinefrom 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 是矢量化的,而您的代码不是。以上是关于如何根据两列在熊猫数据框中自定义排序?的主要内容,如果未能解决你的问题,请参考以下文章