根据与指定值的接近程度对熊猫数据框进行排名

时间:2018-12-26 20:53:15

标签: python pandas python-2.7 ranking

很抱歉,如果这是一项琐碎的任务。我是编码和Python的新手,正在学习作为论文的一部分。

我有一个数据框,并希望根据其与指定值的接近程度(而不是升序或降序)对其中的每一列进行排名。

我正在研究比较跑步/自行车路线的方法。作为此过程的一部分,我试图根据一些不同的属性来查找查询路线与目标路线的比较:距离,高程增益,高程损失和坡度。我得到的结果数据帧显示了比较中每个属性中两条路由之间的错误(即[目标路由值-查询路由值] /目标路由值)。我当前面临的问题是对这些结果进行排名。由于完美匹配的值为0,因此我想根据这些值与该值的接近程度对其进行排名。

要排名的数据框:

scores = pd.DataFrame({'distance':[0.15, 0.07, -0.09, 0], 'elevation_gain': 
        [-0.19,-8.39, -0.86, 0],'elevation_loss':[-3.73, -2.51, -0.16, 0], 
        'gradient': [0.12, 0.39, 2.77, 0]})

在这种情况下,第四条路线是查询路线,因此结果是完美匹配,因此应排在第一位。
由于存在负值,所以我认为不适合采用降序排列。

我的目标是:

ranks = pd.DataFrame({'distance':[4, 2, 3, 1], 'elevation_gain': [2,4, 3, 
      1],'elevation_loss':[4, 3, 2, 1], 'gradient': [2, 3, 4, 1]})

(应用程序,我不知道如何可视化这些数据框以使其更易于消化)

然后我可以创建一个新列,对等级求和,最低分将表明最佳匹配。

感谢您的任何帮助!

1 个答案:

答案 0 :(得分:0)

尝试一下:

ranks = scores.abs().apply(pd.Series.rank).astype(int)
ranks 

输出:

   distance  elevation_gain  elevation_loss  gradient
0         4               2               4         2
1         2               4               3         3
2         3               3               2         4
3         1               1               1         1