pandas--排序和排名

排序
要对行或列索引进行排序,可使用sort_index方法,它将返回一个已排序的新对象:
Series
1、对Series索引排序
1 obj=Series(range(4),index=['d','a','b','c'])
2 
3 obj.sort_index()
4 Out[18]: 
5 a    1
6 b    2
7 c    3
8 d    0
9 dtype: int64

2、按值对Series进行排序

 1 obj=Series([4,7,-3,2])
 2 
 3 obj
 4 Out[10]: 
 5 0    4
 6 1    7
 7 2   -3
 8 3    2
 9 dtype: int64
10 
11 obj.sort_values()
12 Out[11]: 
13 2   -3
14 3    2
15 0    4
16 1    7
17 dtype: int64

在排序时,任何缺失值默认都会被放到Series的末尾:

 1 obj=Series([4,np.nan,7,np.nan,-3,2])
 2 
 3 obj
 4 Out[13]: 
 5 0    4.0
 6 1    NaN
 7 2    7.0
 8 3    NaN
 9 4   -3.0
10 5    2.0
11 dtype: float64
12 
13 obj.sort_values()
14 Out[14]: 
15 4   -3.0
16 5    2.0
17 0    4.0
18 2    7.0
19 1    NaN
20 3    NaN
21 dtype: float64

 

DataFrame
1、对于DataFrame,可以根据任意一个轴上的索引进行排序:
 1 frame=DataFrame(np.arange(8).reshape((2,4)),index=['three','one'],
 2 columns=['d','a','b','c'])
 3 
 4 frame
 5 Out[20]: 
 6        d  a  b  c
 7 three  0  1  2  3
 8 one    4  5  6  7
 9 
10 frame.sort_index()
11 Out[21]: 
12        d  a  b  c
13 one    4  5  6  7
14 three  0  1  2  3
15 
16 #指定轴
17 frame.sort_index(axis=1)
18 Out[22]: 
19        a  b  c  d
20 three  1  2  3  0
21 one    5  6  7  4

数据默认是升序排序,但也可以降序排序

1 frame.sort_index(axis=1,ascending=False)
2 Out[23]: 
3        d  c  b  a
4 three  0  3  2  1
5 one    4  7  6  5

2、在DataFrame上,根据一个或多个列中的值来进行排序

 1 frame=DataFrame({'b':[4,7,-3,2],'a':[0,1,0,1]})
 2 
 3 frame
 4 Out[16]: 
 5    a  b
 6 0  0  4
 7 1  1  7
 8 2  0 -3
 9 3  1  2
10 
11 frame.sort_values(by='b')
12 
13 Out[17]: 
14    a  b
15 2  0 -3
16 3  1  2
17 0  0  4
18 1  1  7
19 
20 #根据多个列进行排序,传入名称的列表即可
21 frame.sort_values(by=['a','b'])
22 
23 Out[18]: 
24    a  b
25 2  0 -3
26 0  0  4
27 3  1  2
28 1  1  7
排名
通过Series和DataFrame的rank方法。
默认情况下,rank是通过“为各组分配一个平均排名”的方式破坏平级关系的。
Series
 1 obj=Series([7,-5,7,4,2,0,4])
 2 
 3 obj.rank()
 4 Out[20]: 
 5 0    6.5
 6 1    1.0
 7 2    6.5
 8 3    4.5
 9 4    3.0
10 5    2.0
11 6    4.5
12 dtype: float64
13 
14 #将数值进行排序,对于相同数据排名,取排名的平均值    

根据值在原数据中出现的顺序给出排名:

obj.rank(method='first')
Out[21]: 
0    6.0
1    1.0
2    7.0
3    4.0
4    3.0
5    2.0
6    5.0
dtype: float64

可以进行降序排名:

 1 #max使用整个分组的最大排名
 2 obj.rank(ascending=False,method='max')
 3 Out[22]: 
 4 0    2.0
 5 1    7.0
 6 2    2.0
 7 3    4.0
 8 4    5.0
 9 5    6.0
10 6    4.0
11 dtype: float64
DataFrame
在行或列上计算排名
 1 frame=DataFrame({'b':[4.3,7,-3,2],'a':[0,1,0,1],
 2 'c':[-2,5,-8,-2.5]})
 3 
 4 frame
 5 Out[25]: 
 6    a    b    c
 7 0  0  4.3 -2.0
 8 1  1  7.0  5.0
 9 2  0 -3.0 -8.0
10 3  1  2.0 -2.5
11 
12 #指定轴
13 frame.rank(axis=1)
14 Out[26]: 
15      a    b    c
16 0  2.0  3.0  1.0
17 1  1.0  3.0  2.0
18 2  3.0  2.0  1.0
19 3  2.0  3.0  1.0
排名时用于破坏平级关系的method选项
'average' 默认:在相等分组中,为各值分配平均排名
'min' 使用整个分组的最小排名
'max' 使用整个分组的最大排名
'first' 按值在原数据中的出现顺序分配排名

 

 

posted @ 2018-07-18 15:59  平淡才是真~~  阅读(848)  评论(0编辑  收藏  举报