首页 > 解决方案 > 按密集排名对python pandas中的数据帧进行排名,并用连续数字替换列中的非连续数字

问题描述

我正在尝试按分数的升序对数据框进行排名,如果发现两个分数相同,则分配相同的排名。我目前正在使用以下方法,

df['IAbsRank'] = df['IAbs'].rank(ascending=0,method='dense')

给我整理排名的原始文件是通过一些python脚本运行的(这是在执行排名之后),由于这里不相关的原因,删除了很多行,导致 IAbsIRel丢失他们有很多连续的(如果排名相同,则重复,即 1,2,2,3,4,5,5)数字。

我故意从原始数据框中省略了几列,这些列将显示在下面发布的列的左侧。

我要排名的重要列是IAbsIRel.不确定是否相关,但每列大约有 3,000 行,我在此省略。

IAbs IAbsRank IRel IRelRank 69102933.3 1 30 10 43261866.7 3 6.1 56 36259200 6 1.8 317 35766400 7 1.9 286 34404266.7 8 7.6 47 29296000 11 2.6 178

仅供参考,在 python 脚本本身中,排名是在文件以最终 csv 格式保存之前完成的,即

df['IAbsRank'] = df['IAbs'].rank(ascending=0,method='dense')
df['IAbsRank'].to_csv(out_fn)
df['IRelRank'] = df['IRel'].rank(ascending=0,method='dense')
df.sort_values(by="IAbsRank", ascending=True, inplace=True)
df[df['Select'] == True].to_csv(out_fn, index=False, float_format="%.1f")

whereTrue表示 python 脚本在所有行中查找的条件。如上所述,不满足此条件的行将删除。

在 python 脚本中,我可以在哪里以及如何重新对列进行排序,以便更正已删除的行,所以我最终得到例如,排名列的结果显示的数量从顶部开始增加到底,没有数字被跳过?

标签: pythonpandasdataframe

解决方案


推荐阅读