pandas排名函數的使用
在Pandas中,可以使用rank()
函數來進行排名操作。
rank()
函數可以用於爲數據幀中的元素分配排名,並提供不同的排名策略,例如從小到大排名、從大到小排名等。
使用上面的一組模擬數據,介紹rank
方法的使用。 其中參數method
:
- average: 組內的平均排名;
- min: 最小排名方式;
- max: 最大排名方式;
- first: 根據出現順序分配排名,首次出現的元素排名較高;
- dense: 據出現順序分配排名,但沒有間隔。
默認情況下,rank()
函數是按升序排名的,你可以通過設置ascending=False
參數來改爲降序排名。
一、模擬數據
import pandas as pd
df = pd.DataFrame(data={'score': [100, 99, 99, 96, 95, 90, 90, 90, 90, 86]})
df
score
0 100
1 99
2 99
3 96
4 95
5 90
6 90
7 90
8 90
9 86
二、排名方式
2.1 默認方式("average")
相同值的元素將被分配平均排名。例如,如果有n個元素並列,那麼它們的排名將是:並列首行所在的行數+0.5*(n-1)。
df1 = df.copy()
df1['rank'] = df1['score'].rank(method='average', ascending=False)
2.2 最小排名方式("min")
類似SQL中 rank。
相同值的元素將被分配最低排名。例如,如果有n個元素並列,那麼它們的排名將都是並列的第1行數據所在的行數。
df2 = df.copy()
df2['rank'] = df1['score'].rank(method='min', ascending=False)
2.3 最大排名方式("max")
相同值的元素將被分配最高排名。例如,如果有n個元素並列,那麼它們的排名將都是最後一個元素所在的行數。
df3 = df.copy()
df3['rank'] = df3['score'].rank(method='max', ascending=False)
2.4 連續編號不重複("first")
類似SQL中 row_number。
根據出現順序分配排名,首次出現的元素排名較高。排名等於行所在的行數。
df4 = df.copy()
df4['rank'] = df4['score'].rank(method='first', ascending=False)
2.5 密集排名方式("dense")
類似SQL中 dense_rank。
根據出現順序分配排名,但沒有間隔。例如,如果有兩個元素排名爲1,下一個排名將爲2,而不是3。
df5 = df.copy()
df5['rank'] = df5['score'].rank(method='dense', ascending=False)