47 pandas rank数据排名(补全实例)(tcy)

1.函数

s.rank(axis=0, method='average', numeric_only=None, na_option='keep', ascending=True, pct=False)
df.rank(axis=0, method='average', numeric_only=None, na_option='keep', ascending=True, pct=False)

沿轴计算数值数据等级(1到n)
rank函数返回从小到大排序的下标;默认情况下,rank是通过“为各组分配一个平均排名”的方式破坏平级关系的

=========================================================================================
2.参数

axis=0:{0或'index',1或'columns'}
method :{'average', 'min', 'max', 'first', 'dense'}
    *average组的平均排名
    * min组中最低排名
    * max组中的最高排名
    * first按顺序分配的排名,它们出现在数组中
    *dense像'min',但是群组之间的等级总是增加1
numeric_only=None :bool仅含float,int,bool数据。仅对DataFrame或面板对象
na_option='keep':{'keep','top','bottom'}
    *keep将NA值保留在原来的位置
    * top升序时的最小排名
    *bottom如果下降则排名最小
ascending=True:升序排名

pct=False:计算数据的百分比排名
=========================================================================================

3.实例

实例1:method = 'average', 'min', 'max', 'first', 'dense'

s = pd.Series([26,21,23,22,21,26],index=['e1',"a1","d1","c1","a2","e2"])

average=s.rank()                         # 平均排名;数值从1-n,若有重复值取重复值的平均数后再赋给重复值
                                         # 21最小所以第一个21排名值=1,第二个21排名值=2;最终取排名值1+2的平均值1.5作为二个21的排名值
first=s.rank(method="first")        # 根据值出现的顺序排名值依次加1;从1-n
sort_first=s[s.rank(method="first").sort_values().astype(int)-1]
min=s.rank(method="min")            # 最小值排名值为1,然后每个数值排名值加1;然后第2个以后的重复值的排名值等于第1个值的排名值
max=s.rank(method="max")    # 最大值为n,然后按照类似降序依次减1,重复值排名值相同都等于第一个重复值的排名值
dense=s.rank(method="dense")# 最小值排名值为1,重复值排名值相同,第2个以后的重复值的排名值不减1

#      s           average        first              sort_first        min              max               dense
                                                
e1    26        e1    5.5        e1    5.0        a1    21        e1    5.0        e1    6.0        e1    4.0
a1    21        a1    1.5        a1    1.0        a2    21        a1    1.0        a1    2.0        a1    1.0
d1    23        d1    4.0        d1    4.0        c1    22        d1    4.0        d1    4.0        d1    3.0
c1    22        c1    3.0        c1    3.0        d1    23        c1    3.0        c1    3.0        c1    2.0
a2    21        a2    1.5        a2    2.0        e1    26        a2    1.0        a2    2.0        a2    1.0
e2    26        e2    5.5        e2    6.0        e2    26        e2    5.0        e2    6.0        e2    4.0
=========================================================================================
实例2:na_option='keep':{'keep','top','bottom'}
s = pd.Series([26,21,np.nan,22,21,26,np.nan],index=['a3',"a1","n2","a2","a1","b3",'n2'])

s.rank(na_option='keep',method="first")   #按值排名值加1,na值除外
s.rank(na_option='top',method="first")    #na值排名值为1,然后依次加1,处理完na值后数值排名值加1
s.rank(na_option='bottom',method="first") #数值排名值依次加1,然后在处理na值,依次加1

# s                   keep            top            bottom            
a3    26.0        a3    4.0        a3    6.0        a3    4.0
a1    21.0        a1    1.0        a1    3.0        a1    1.0
n2    NaN         n2    NaN        n2    1.0        n2    6.0
a2    22.0        a2    3.0        a2    5.0        a2    3.0
a1    21.0        a1    2.0        a1    4.0        a1    2.0
b3    26.0        b3    5.0        b3    7.0        b3    5.0
n2    NaN         n2    NaN        n2    2.0        n2    7.0

=========================================================================================
实例3:按降序进行排名
obj = pd.Series([7,-5,7,4,2,0,4])

obj.rank(ascending=False, method='max')

0    2.0
1    7.0
2    2.0
3    4.0
4    5.0
5    6.0
6    4.0
dtype: float64

=========================================================================================
实例4:axis -对DataFrame进行排名

df=pd.DataFrame({'b':[5,7,-3,2],'a':[0,1,0,1],'c':[-2,5,8,-3]})

df.rank(axis=0,method="first")
df.rank(axis=1,method="first")

# df                axis=0                     axis=1
   b  a  c             b    a    c             b    a    c
0  5  0 -2        0  3.0  1.0  2.0        0  3.0  2.0  1.0
1  7  1  5        1  4.0  3.0  3.0        1  3.0  1.0  2.0
2 -3  0  8        2  1.0  2.0  4.0        2  1.0  2.0  3.0
3  2  1 -3        3  2.0  4.0  1.0        3  3.0  2.0  1.0

猜你喜欢

转载自blog.csdn.net/tcy23456/article/details/86173473
47