本文主要介绍Python中使用pandas进行排序和排名操作,相关如下:
排序:
对数据集按照某一种方式进行排序(升序、降序或自定义顺序)。
排名:
对数据集按照某一种方式进行排名(从高到低、从低到高或自定义顺序排名),一般生成新的名次序号列。
1. 排序
简介:
sort_index(axis=1,ascending=False)
axis:行索引或列索引,默认为列索引排序,axis = 1 表示对行进行排序;
ascending:排序方式,默认升序,ascending=False 表示降序;
使用方法如下:
obj = pd.Series(range(4),index=['d','a','b','c'])
obj
obj.sort_index()
Out[110]:
d 0
a 1
b 2
c 3
dtype: int64
Out[110]:
a 1
b 2
c 3
d 0
dtype: int64
对于DataFrame,则可以根据任意一个轴上的索引进行排序:
frame = pd.DataFrame(np.arange(8).reshape(2,4),
index=['three','one'],
columns=['d','a','b','c'])
frame
frame.sort_index()
frame.sort_index(axis=1)
frame.sort_index(axis=1,ascending=False)
简介:
sort_values(by=‘b’,ascending=False)
by:排序的依据,by=‘b’ 表示依据b列的数据进行排序;
ascending:排序方式,默认升序,ascending=False 表示降序;
使用方法如下:
obj = pd.Series([4,7,-3,2])
obj
obj.sort_values()
Out[114]:
0 4
1 7
2 -3
3 2
dtype: int64
Out[114]:
2 -3
3 2
0 4
1 7
dtype: int64
特别的,在排序时,任何缺失值默认都会被放到Series的末尾:
obj = pd.Series([4,np.nan,7,np.nan,-3,2])
obj
obj.sort_values()
Out[115]:
0 4.0
1 NaN
2 7.0
3 NaN
4 -3.0
5 2.0
dtype: float64
Out[115]:
4 -3.0
5 2.0
0 4.0
2 7.0
1 NaN
3 NaN
dtype: float64
在DataFrame中,可以将一个或多个列的名字传递给sort_values的by选项,来实现对一个或多个列中的值进行排序。
## 单个排序结果
frame = pd.DataFrame({'b':[4,-3,-3,2], 'a':[0,1,0,1]})
frame
frame.sort_values(by='b')
frame.sort_index(by=['a','b'])
2. 排名
rank():对数据进行排名
简介:
df.rank(ascending=False, method=‘max’)
ascending:排名方式,默认从低到高,ascending=False 表示从高到低;
method:排名方式,包括:“average”、“min”、“max”、“first”、“dense”。默认情况下,rank是通过“为各组分配一个平均排名”的方式破坏平级关系的,对照表如下:
使用方法
排名会从1开始一直到数组中有效数据的数量。
obj = pd.Series([7,-5,7,4,2,0,4])
# 输出排名序号
obj.rank()
Out[123]:
0 6.5
1 1.0
2 6.5
3 4.5
4 3.0
5 2.0
6 4.5
dtype: float64
## 也可以根据值在原数据中出现的顺序给出排名:
obj.rank(method='first')
Out[124]:
0 6.0
1 1.0
2 7.0
3 4.0
4 3.0
5 2.0
6 5.0
dtype: float64
这里,条目0和2没有使用平均排名6.5,它们被设成了6和7,因为数据中标签0位于标签2的前面。
你也可以按降序进行排名:
obj.rank(ascending=False, method='max')
Out[125]:
0 2.0
1 7.0
2 2.0
3 4.0
4 5.0
5 6.0
6 4.0
dtype: float64
另,DataFrame可以在行或列上计算排名:
frame = pd.DataFrame({'b': [4.3, 7, -3, 2], 'a': [0, 1, 0, 1],
'c': [-2, 5, 8, -2.5]})
frame
frame.rank(axis='columns')
参考文献:
【1】利用Python进行数据分析(第2版)https://www.jianshu.com/p/161364dd0acf;
作者简介
作者:榆尚天
简介:一个数据分析的爱好者,立志成为一名数据界的幽灵。
微信平台:数据幽灵
期待与各位同道的交流,欢迎关注~~~
————————————————————————————
作者:榆尚天
出处:https://mp.csdn.net/mdeditor/90265032
说明:本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。