Python 如何在基于两列的dataframe中自定义排序?
我有一个数据帧:-Python 如何在基于两列的dataframe中自定义排序?,python,pandas,dataframe,sorting,geolocation,Python,Pandas,Dataframe,Sorting,Geolocation,我有一个数据帧:- 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 我有一个元组,
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进行排序用于计算距离数组,然后np.argsort
和iloc
:
from sklearn.metrics.pairwise import haversine
distance = haversine(df[['lat','lon']], x)
df.iloc[np.argsort(distance)]
您可以这样使用它:
from sklearn.metrics.pairwise import haversine
df["distance"] = ""
df["distance"] = df.agg(lambda x: haversine((x["lat"],x["long"]), x), axis=1)
谢谢你的回答。我正在使用scikit learn==0.20.0,无法进行导入,该版本可能不可用。由于其他原因,我也无法升级scikit learn。使用haversine import haversine中的haversine
或任何不同的方法可以完成相同的操作吗?sklearn的haversine来自0.22.2。您可以看到一个允许矢量化的实现。它与我的答案有什么不同?另外,在这种情况下,您不应该使用agg
,因为sklearn的haversine是矢量化的,而您的代码不是矢量化的。