根据条件对Series对象或DataFrame对象的值排序(Sorting)和排名(Ranking)是Pandas一种重要的内置运算。Series对象或DataFrame对象可以使用sort_index()/sort_values()函数进行排序,使用rank()函数进行排名。
Series和DataFrame的排名
排名跟排序关系密切,且它会增设一个排名值(从1开始,一直到Pandas中有效数据的总数)。但需要注意如何处理出现相同的值。下面介绍Series和DataFrame的rank()函数。
1.Series的排名
Series的rank()函数。
rank(method="average", ascending=True)
对于出现的相同的值,method参数值first表示按值在原始数据中的出现顺序分配排名,min表示使用整个分组的最小值排名,max使用整个分组的最大值排名,average使用平均值排名,也是默认的排名方式。还可以设置ascending参数,设置按降序排名或升序排名。
import pandas as pd s = pd.Series([1 ,3 ,2 ,1 ,6] ,index=["a" ,"c" ,"d" ,"b" ,"e"]) #1是最小的,所以第一个1排在第一,第二个1排在第二,因为取的是平均排名,所以1的排名为1.5 print(s.rank())# 默认根据值的大小进行平均排名
结果如下:
a 1.5 c 4.0 d 3.0 b 1.5 e 5.0
设置method参数值:
print(s.rank(method="first")) # 根据值在Series中出现的顺序进行排名
结果如下:
a 1.0 c 4.0 d 3.0 b 2.0 e 5.0
2.DataFrame的排名
DataFrame的rank()函数。
rank(axis=1, method="average", ascending=True)
method参数和ascending参数的设置与Series中的一样。
import pandas as pd a = [[9, 3, 1], [1, 2, 8], [1, 0, 5]] data = pd.DataFrame(a, index=["0", "2", "1"], columns=["c", "a", "b"]) print(data)
原始数据如下:
c a b 0 9 3 1 2 1 2 8 1 1 0 5
默认按列进行排名:
print(data.rank())
结果如下:
c a b 0 3.0 3.0 1.0 2 1.5 2.0 3.0 1 1.5 1.0 2.0
按行进行排名:
print(data.rank(axis=1))
结果如下:
0 3.0 2.0 1.0 2 1.0 2.0 3.0 1 2.0 1.0 3.0