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)
你会想要使用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