如何在熊猫中创建"排名"列?

Niv*_*ivi 2 python pandas

我试图(col 1)在熊猫中排名一列.如果有平局,我想查看另一列(col 2)只是为了那些记录并做一个打破平局.如果它们在该列中相同,我想只是随机分配排名,但每行必须具有唯一的排名.

例:

col1  |  col 2 | Rank
 20   |  3     | 3
 22   |  2     | 2
 22   |  2.5   | 1
 3    |  1     | 4
 3    |  1     | 5
Run Code Online (Sandbox Code Playgroud)

Fre*_*red 6

df['Rank'] = df.sort_values(by=['col1', 'col2'], ascending=False) \
               .reset_index() \
               .sort_values('index') \
               .index + 1
Run Code Online (Sandbox Code Playgroud)

此代码执行以下步骤:

  1. 将数据框排序为新的临时数据框
  2. 重置索引,将旧索引保留为名为"index"的新列.确保没有任何名为'index'的起始列.如果您有一个,则调用新列level_0.如果你有两个indexlevel_0,代码将抛出异常.
  3. 根据旧索引对临时数据帧进行排序(因此它再次按原始顺序排序)
  4. 使用新索引(按照我们想要的排名顺序)作为新的"排名"列.加1,因为你的问题似乎要求排名从1开始,而不是0