pandas:排序和排名

有的时候我们可以要根据索引的大小或者值的大小对Series和DataFrame进行排名和排序。
根据条件对Series对象或DataFrame对象的值排序(sorting)和排名(ranking)是一种重要的内置运算。
接下来为大家介绍如何使用pandas对象的:sort_index()/ sort_values()/ rank()方法。

一、排序

pandas提供了sort_index方法可以根据行或列的索引按照字典的顺序进行排序,返回一个已排 的新对象

a、Series排序
1、按索引进行排序
    #定义一个Series
    s = Series([1,2,3],index=["a","c","b"])
    #对Series的索引进行排序,默认是升序
    print(s.sort_index())
    '''
    a    1
    b    3
    c    2
    '''
    #对索引进行降序排序
    print(s.sort_index(ascending=False))
    '''
    c    2
    b    3
    a    1
    '''
2、按值进行排序
    s = Series([np.nan,1,7,2,0],index=["a","c","e","b","d"])
    #对Series的值进行排序,默认是按值的升序进行排序的
    print(s.sort_values())
    '''
    d    0.0
    c    1.0
    b    2.0
    e    7.0
    a    NaN
    '''
    #对Seires的值进行降序排序
    print(s.sort_values(ascending=False))
    '''
    e    7.0
    b    2.0
    c    1.0
    d    0.0
    a    NaN
    '''
NaN值会放在Series末尾
se4=pd.Series([3,np.nan,-7,np.nan,5])
se4.sort_values()
2   -7.0
0    3.0
4    5.0
1    NaN
3    NaN
dtype: float64

对DataFrame排序

通过axis参数可以对任意轴排序
df1=pd.DataFrame(np.arange(9).reshape(3,3),index=list("bac"),columns=list("yzx"))
print(df1)
'''
   y  z  x
b  0  1  2
a  3  4  5
c  6  7  8
'''

print(df1.sort_index())
'''
   y  z  x
a  3  4  5
b  0  1  2
c  6  7  8
'''

print(df1.sort_index(axis=1))
'''
   x  y  z
b  2  0  1
a  5  3  4
c  8  6  7
'''
根据一个列的值来排序
df2=pd.DataFrame({'a':[20,3,3],'b':[1,-6,18]})
print(df2.sort_values(by='b'))
'''
    a   b
1   3  -6
0  20   1
2   3  18
'''
对多个列来排序
print(df2.sort_values(by=['a','b']))
'''
    a   b
1   3  -6
2   3  18
0  20   1
'''
降序排列

df = DataFrame(np.arange(20).reshape(5,4),index=[3,1,2,4,6],columns=['d','c','a','b'])
print(df.sort_index(ascending=False)) # 降序排列
'''
    d   c   a   b
6  16  17  18  19
4  12  13  14  15
3   0   1   2   3
2   8   9  10  11
1   4   5   6   7
'''

rank( )函数进行排名

rank函数返回从小到大排序的下标

1、默认情况下,rank是通过“为各组分配一个平均排名”的方式破坏平级关系的
In [120]:obj = pd.Series([7,-5,7,4,2,0,4])
In [121]:obj.rank()
Out [121]:
0    6.5
1    1.0
2    6.5
3    4.5
4    3.0
5    2.0
6    4.5
dtype: float64

2、根据值在原数据中出现的顺序排名
In [122]:obj.rank(method='first')
Out [122]:
0    6.0
1    1.0
2    7.0
3    4.0
4    3.0
5    2.0
6    5.0
dtype: float64

3、按降序进行排名
In [123]:obj.rank(ascending=False, method='max')
Out [123]:
0    2.0
1    7.0
2    2.0
3    4.0
4    5.0
5    6.0
6    4.0
dtype: float64

4、若对DataFrame进行排序,则可根据axis指定要进行排序的轴
In [136]: frame=pd.DataFrame({'b':[5,7,-3,2],'a':[0,1,0,1],'c':[-2,5,8,-3]})

In [137]: frame
Out[137]:
   a  b  c
0  0  5 -2
1  1  7  5
2  0 -3  8
3  1  2 -3

In [138]: frame.rank(axis=0)
Out[138]:
     a    b    c
0  1.5  3.0  2.0
1  3.5  4.0  3.0
2  1.5  1.0  4.0
3  3.5  2.0  1.0

In [139]: frame.rank(axis=1)
Out[139]:
     a    b    c
0  2.0  3.0  1.0
1  1.0  3.0  2.0
2  2.0  1.0  3.0
3  2.0  3.0  1.0

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值