如何创建排名'大熊猫的专栏?

时间:2018-03-14 13:46:20

标签: python pandas

我正在尝试在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

1 个答案:

答案 0 :(得分:6)

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

此代码执行以下步骤:

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