Python CategoricalDtype自定义排序实现原理解析
作者:秋天中的一片叶 发布时间:2021-05-31 22:30:32
标签:Python,Categorical,Dtype,自定义,排序
CategoricalDtype自定义排序
当我们的透视表生成完毕后,有很多情况下需要我们对某列或某行值进行排序。排序有很多种方法。例如sort_index及sort_values函数也可以对数据进行排序,这里就不多说了。
对于数值和字母的排序很容易,但是对于中文的排序就有点麻烦了。默认情况下是按照utf-8的编码来进行排序的但是即使如此也很难满足我们对汉字排序的要求。所以通过CategoricalDtye可以把数据类型转成Category类型
然后通过指定参数列表的顺序来自定义那个元素先那个元素后,完全取决于你把那个元素放在List的前面,这样就大大方便了我们对中文排序的操作。
代码如下:
1. 自动生成DataFrame数据
#%%
import pandas as pd
from datetime import datetime
city =["上海","北京","深圳","杭州","苏州","青岛","大连","齐齐哈尔","大理","丽江",
"天津","济南","南京","广州","无锡","连云港","张家界"]
#创建自动从list中选取valuse值的get_list函数
#replace=True代表允许选出的元素重复
def get_list(items,size=20):
return pd.Series(items).sample(n=size,replace=True).to_list()
#通过get_list自动生成数据,最终生成一个DataFrame
df = pd.DataFrame({
"城市":get_list(city),
"仓位":get_list(["经济舱","商务舱","头等舱"]),
"航线":get_list(["单程","往返"]),
"日期": get_list([datetime(2020,8,1),datetime(2020,8,2),
datetime(2020,8,3),datetime(2020,8,4)]),
"时间": get_list(["09:00 - 12:00",
"13:00 - 15:30",
"06:30 - 15:00",
"18:00 - 21:00",
"20:00 - 23:20",
"10:00 - 15:00"]),
"航空公司": get_list(["东方航空","南方航空","深圳航空","山东航空","中国航空"]),
"出票数量":get_list([10,15,20,25,30,35,40,45,50,55,60]),
})
#%%
df
结果如下:
2. 查看数据类型
#%%
df.dtypes
3. 自定义数据类型(Category)按照指定顺序排序,并通过透视表展示数据
#%%
#自定义type,以及自定义排序的顺序
my_type = pd.CategoricalDtype(
categories=["头等舱","商务舱","经济舱"],
ordered=True
)
df["仓位"] = df["仓位"].astype(my_type) #将指定列转成自定义的type
df.dtypes
#%%
#通过透视表统计数据
tb = pd.pivot_table(
df,
index=["城市","仓位","航线","日期","时间"],
values="出票数量",
aggfunc=sum
)
tb
先查看数据类型:可以看出仓位的数据类型已经从Object变成了category类型了。
结果为:
分析上述数据可以看出,我们把仓位按照["头等舱","商务舱","经济舱"]的顺序进行了排序,排序结果也是按照这个顺序排列的,成功的满足了我们对中文列自定义排序的需求。
通过Pivot_table函数更加清晰的对原有数据进行了展示。也可以按照自己的需求展示其中的一部分数据。这样对数据的清洗及展示变得更加的灵活。
来源:https://www.cnblogs.com/liupengpengg/p/13559861.html


猜你喜欢
- 今天在一个QQ群中看到有人在问一个进度条的实现方式,当时因为工作时间,需求相对也比较紧,只是简单的说了一下可以通过CSS的边框属性和背景属性
- 前言使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__方法在类的一个对象被建立时,马上
- static function convert($size) { &
- 经常由于各种压缩格式的不一样用到文件的解压缩时就需要下载不同的解压缩工具去处理不同的文件,以至于桌面上的压缩工具就有三四种,于是使用pyth
- jsonp方式一:指定返回方法# 后端def view(request): callback = request.GET.get
- 一、集合在 python 中用 {} 扩起一堆数字,但是这堆数字没有体现映射关系,那么这堆数字就是一个集合。集合的特色:集合在 python
- 通常我们写tab选项卡的时候,一般都是用jq等去操作dom,给同级元素移除active类,然后,给被点击元素添加active类,但是在vue
- Java Java 是由 Sun 公司开发而成的一种编程语言,利用 Jave 写成的小程序叫做 Java
- 0.前言添加colormap的对象是灰度图,可以变成热量图,从而更加明显的发现一些规律,适用于一些雷达图像等from PIL import
- 1、准备工作ide:pycharmpython:3.7三方包:pygame、pyinstaller、mutagen几首mp3格式的歌2、开始
- 需求描述有时候我们会基于已有数据生成一列在表格中,类似于下面的class BaseSchema(models.Model): ... def
- 前言Python用于处理文本数据绝对是个利器,极为简单的读取、分割、过滤、转换支持,使得开发者不需要考虑繁杂的流文件处理过程(相对于JAVA
- JSON Schema是一个用于验证JSON数据结构的强大工具, 我查看并学习了JSON Schema的官方文档, 做了详细的记录, 分享一
- 开启debug模式在app.run()中传递参数,使用debug = True开启:app.run(debug=True)设置配置项,以配置
- 1.如何用函数先定义后调用,定义阶段只检测语法,不执行代码调用阶段,开始执行代码函数都有返回值定义时无参,调用时也是无参定义时有参,调用时也
- 在二维矩阵间的运算:class torch.nn.Conv2d(in_channels, out_channels, kernel_size
- 如下所示:a = [99,1,2,1,3,4]# 集合存储重复数据b=set()for i in a: if a.count(i
- 目录一、ZIP 格式简介二、浏览器解压方案2.1 定义工具类2.2 在线解压 ZIP 文件三、服务器解压方案3.1 根据文件名解压指定 ZI
- go get 和 go install 的区别先看结论:go get: 对 go mod 项目,添加,更新,删除&nbs
- 使用json.dumps输出中文在使用json.dumps时要注意一个问题>>> import json>>&