Python数据分析从入门到精通
上QQ阅读APP看书,第一时间看更新

3.9 数据排序与排名

本节主要介绍数据的各种排序和排名方法。

3.9.1 数据排序

DataFrame数据排序主要使用sort_values()方法,该方法类似于SQL中的ORDER BY。sort_values()方法可以根据指定行/列进行排序,语法如下:

DataFrame.sort_values(by,axis=0,ascending=True,inplace=False,kind='quicksort',na_position='last',ignore_
index=False)

参数说明:

 by:要排序的名称列表。

 axis:轴,axis=0表示行,axis=1表示列。默认值为0,即按行排序。

 ascending:升序或降序排序,布尔值,指定多个排序可以使用布尔值列表。默认值为True。

 inplace:布尔值,默认值为False,如果值为True,则就地排序。

 kind:指定排序算法,值为quicksort(快速排序)、mergesort(混合排序)或heapsort(堆排),默认值为quicksort。

 na_position:空值(NaN)的位置,值为first空值在数据开头,值为last空值在数据最后,默认值为last。

 ignore_index:布尔值,是否忽略索引,值为True标记索引(从0开始按顺序的整数值),值为False则忽略索引。

1.按一列数据排序

【示例46】 按“销量”降序排序。(示例位置:资源包\MR\Code\03\46)

按“销量”降序排序,排序对比效果如图3.61和图3.62所示。

图3.61 原始数据

图3.62 按“销量”降序排序

实用技巧

Spyder变量浏览窗口本身也支持数据排序,单击需要排序的列即可实现升序或降序排序。

程序代码如下:

2.按多列数据排序

多列排序是按照给定列的先后顺序进行排序的。

【示例47】 按照“图书名称”和“销量”降序排序。(示例位置:资源包\MR\Code\03\47)

按照“图书名称”和“销量”降序排序,首先按“图书名称”降序排序,然后再按“销量”降序排序,排序后的效果如图3.63所示。

图3.63 按照“图书名称”和“销量”降序排序

主要代码如下:

df1=df.sort_values(by=['图书名称','销量'])
3.对统计结果排序

【示例48】 对分组统计数据进行排序。(示例位置:资源包\MR\Code\03\48)

按“类别”分组统计销量并进行降序排序,统计排序后的效果如图3.64所示。

图3.64 按“类别”分组统计销量并降序排序

主要代码如下:

01 df1=df.groupby(["类别"])["销量"].sum().reset_index()
02 df2=df1.sort_values(by='销量',ascending=False)
4.按行数据排序

【示例49】 按行数据排序。(示例位置:资源包\MR\Code\03\49)

按行排序,主要代码如下:

df=dfrow.sort_values(by=0,ascending=True,axis=1)

注意

按行排序的数据类型要一致,否则会出现错误提示。

3.9.2 数据排名

排名是根据Series对象或DataFrame的某几列的值进行排名的,主要使用rank()方法,语法如下:

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

参数说明:

 axis:轴,axis=0表示行,axis=1表示列。默认值为0,即按行排序。

 method:表示在具有相同值的情况下所使用的排序方法。设置值如下。

 average:默认值,平均排名。

 min:最小值排名。

 max:最大值排名。

 first:按值在原始数据中的出现顺序分配排名。

 dense:密集排名,类似最小值排名,但是排名每次只增加1,即排名相同的数据只占一个名次。

 numeric_only:对于DataFrame对象,如果设置值为True,则只对数字列进行排序。

 na_option:空值的排序方式,设置值如下。

 keep:保留,将空值等级赋值给NaN值。

 top:如果按升序排序,则将最小排名赋值给NaN值。

 bottom:如果按升序排序,则将最大排名赋值给NaN值。

 ascending:升序或降序排序,布尔值,指定多个排序可以使用布尔值列表。默认值为True。

 pct:布尔值,是否以百分比形式返回排名。默认值为False。

1.顺序排名

【示例50】 对产品销量按顺序进行排名。(示例位置:资源包\MR\Code\03\50)

下面对销量相同的产品,按照出现的顺序排名,程序代码如下:

程序运行结果如图3.65所示。

2.平均排名

【示例51】 对产品销量进行平均排名。(示例位置:资源包\MR\Code\03\51)

现在对销量相同的产品,按照顺序排名的平均值作为平均排名,主要代码如下:

01 df['平均排名']=df['销量'].rank(ascending=False)
02 df1=df[['图书名称','销量','平均排名']]

程序运行结果如图3.66所示。

3.最小值排名

排名相同的,按顺序排名取最小值作为排名,主要代码如下:

df['最小值排名']=df['销量'].rank(method="min",ascending=False)
4.最大值排名

排名相同的,按顺序排名取最大值作为排名,主要代码如下:

df['最大值排名']=df['销量'].rank(method="max",ascending=False)

图3.65 销量相同按出现的先后顺序排名

图3.66 销量相同按顺序排名的平均值排名