很抱歉,如果这是一项琐碎的任务。我是编码和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]})
(应用程序,我不知道如何可视化这些数据框以使其更易于消化)
然后我可以创建一个新列,对等级求和,最低分将表明最佳匹配。
感谢您的任何帮助!
答案 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