深入理解Pandas数据排序

2022-01-06  本文已影响0人  皮皮大

公众号:尤而小屋
作者:Peter
编辑:Peter

大家好,我是Peter~

在之前的一篇文章中,详细介绍了关于如何使用pandas的内置函数sort_values来实现数据的排序。本文讲解的是如何使用自定义方式来实现排序:

image

模拟数据

先模拟一份简单的数据:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    "nick":["aaa","bbb","aba","abc","cac","ccc"],  # 昵称
    "math":[100,120,130,111,100,128],  # 数学
    "english":[140,80,120,90,125,116],  # 英语
    "size":["S","M","L","XS","XL","L"]   # 衣服大小
    })

df
image

sort_values

DataFrame.sort_values(by, 
               axis=0, 
               ascending=True, 
               inplace=False, 
               kind='quicksort', 
               na_position='last', # last,first;默认是last
               ignore_index=False, 
               key=None)

参数的具体解释为:

下面通过几个简单的例子来复习下sort_values的使用:

单个字段排序

通过nick字段排序,字符串是根据字母的ASCII码;默认是从小到大的升序。第一个字母相同,则比较第二个,类推:

image

根据数值的大小来升序排列:

image

可以将排序方式改为降序:

image

多个字段排序

多个字段的同时排序,默认也是升序。当第一个字段的取值相同,再根据第二个字段来升序排列

image

给不同的字段指定不同的排序方式:

image

再完整地对比下两种不同的方式:

image

上面的就是sort_values方法的常见排序方式。

自定义排序

使用sort_values方法排序的时候都是内置的字母或者数值型数据的大小直接来排序,当遇到下面的情况,该如何操作?

当我们根据衣服的大小size来排序,得到的结果是:

image

明显这样的排序方式不是我们理想中的样子,在我们的认知中:

该如何解决这个问题?提供两种方式:

方法1:通过映射

1、先找到每个size的顺序对应的数值大小

2、生成新的字段order

3、我们对order进行排序

image image

方法2:使用CategoricalDtype

CategoricalDtype是具有类别和顺序的分类数据的类型,能够创建我们自定义的排序数据类型。官网地址:

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.CategoricalDtype.html

1、指定一个分类的数据类型CategoricalDtype

category_size = pd.CategoricalDtype(
    ['XS', 'S', 'M', 'L', 'XL'], 
    ordered=True)

category_size
image

2、将size字段设置成上面的CategoricalDtype类型

image

3、我们直接对size使用sort_values就可以达到我们的目的,和上面的map映射的效果是相同的

image

而且通过查看df的数据类型,我们也看到size的类型是category:

image
上一篇下一篇

猜你喜欢

热点阅读