对pandas数据框中的元素进行排名

iam*_*rot 1 python sorting dataframe pandas

嗨,我正在使用pandas.Dataframe如下:

Name           Quality
Carrot         50
Potato         34
Raddish        43
Ginger         50
Tomato         43
Cabbage        12
Run Code Online (Sandbox Code Playgroud)

我想将排名与数据帧相关联.我已成功地dataframe根据以下字段对其进行排序Quality:

Name           Quality
Carrot         50
Ginger         50
Raddish        43
Tomato         43
Potato         34
Cabbage        12
Run Code Online (Sandbox Code Playgroud)

现在我想要做的是,添加一个名为的新列Position并具有它们存在的等级.

关键是,如果它们的质量相同,则可以给予两个不同元素相同的等级.

示例输出数据帧:

Name           Quality    Position
Carrot         50         1
Ginger         50         1
Raddish        43         2
Tomato         43         2
Potato         34         3
Cabbage        12         4
Run Code Online (Sandbox Code Playgroud)

注意两个具有相同质量的元素如何具有相同的位置,而下面的元素具有+1个位置.此外,该数据框架拥有1000万条记录

我怎么能这样做Pandas.Dataframe

我按如下方式对Dataframe进行排序:

df_sort = dataframe.sort_values(by=attribute, ascending=order)
df_sort.reset_index(drop=True)
Run Code Online (Sandbox Code Playgroud)

W S*_*vis 5

你会想要使用Rank.

排名有一些变化.你想要的是Dense.这确保了联系不会导致一半.

df['Position'] = df.Quality.rank(method='dense', ascending = False).astype(int)
df
      Name  Quality         Position
0   Carrot       50              1
1   Ginger       50              1
2  Raddish       43              2
3   Tomato       43              2
4   Potato       34              3
5  Cabbage       12              4
Run Code Online (Sandbox Code Playgroud)

出于演示目的,如果您不使用dense而是使用min,那么您的数据框将如下所示:

      Name  Quality         Position
0   Carrot       50              1
1   Ginger       50              1
2  Raddish       43              3
3   Tomato       43              3
4   Potato       34              5
5  Cabbage       12              6
Run Code Online (Sandbox Code Playgroud)

这里的关键是使用 ascending = False