Python CategoricalDtype自定义排序实现原理解析


Posted in Python onSeptember 11, 2020

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

结果如下:

Python CategoricalDtype自定义排序实现原理解析

2. 查看数据类型

#%%

df.dtypes

Python CategoricalDtype自定义排序实现原理解析

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类型了。

Python CategoricalDtype自定义排序实现原理解析

结果为:

Python CategoricalDtype自定义排序实现原理解析

分析上述数据可以看出,我们把仓位按照["头等舱","商务舱","经济舱"]的顺序进行了排序,排序结果也是按照这个顺序排列的,成功的满足了我们对中文列自定义排序的需求。

通过Pivot_table函数更加清晰的对原有数据进行了展示。也可以按照自己的需求展示其中的一部分数据。这样对数据的清洗及展示变得更加的灵活。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
高性能web服务器框架Tornado简单实现restful接口及开发实例
Jul 16 Python
Linux环境下MySQL-python安装过程分享
Feb 02 Python
Python实现删除文件但保留指定文件
Jun 21 Python
利用Tkinter和matplotlib两种方式画饼状图的实例
Nov 06 Python
Python的地形三维可视化Matplotlib和gdal使用实例
Dec 09 Python
python如何将图片转换为字符图片
Aug 19 Python
简单了解Python生成器是什么
Jul 02 Python
Python3离线安装Requests模块问题
Oct 13 Python
Python pip配置国内源的方法
Feb 14 Python
Python pandas对excel的操作实现示例
Jul 21 Python
通过代码实例解析Pytest运行流程
Aug 20 Python
python切割图片的示例
Nov 12 Python
python 如何利用argparse解析命令行参数
Sep 11 #Python
Python Pivot table透视表使用方法解析
Sep 11 #Python
Python extract及contains方法代码实例
Sep 11 #Python
python 利用zmail库发送邮件
Sep 11 #Python
浅析Python 责任链设计模式
Sep 11 #Python
详解python命令提示符窗口下如何运行python脚本
Sep 11 #Python
python实现邮件循环自动发件功能
Sep 11 #Python
You might like
win2003服务器使用WPS的COM组件的一些问题解决方法
2012/01/11 PHP
PHP对象Object的概念 介绍
2012/06/14 PHP
PHP实现删除非站内外部链接实例代码
2014/06/17 PHP
PHP生成二维码的两个方法和实例
2014/07/01 PHP
PHP new static 和 new self详解
2017/02/19 PHP
php判断数组是否为空的实例方法
2020/05/10 PHP
基于jQuery的Spin Button自定义文本框数值自增或自减
2010/07/17 Javascript
Js制作简单弹出层DIV在页面居中 中间显示遮罩的具体方法
2013/08/08 Javascript
jQuery 属性选择器element[herf*='value']使用示例
2013/10/20 Javascript
javascript特殊用法示例介绍
2013/11/29 Javascript
JavaScript中判断原生函数检查function是否是原生代码
2014/09/09 Javascript
Javascript this 关键字 详解
2014/10/22 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
2014/11/28 Javascript
JavaScript实现的简单拖拽效果
2015/06/01 Javascript
jQuery的ajax和遍历数组json实例代码
2016/08/01 Javascript
AngularJS入门教程之多视图切换用法示例
2016/11/02 Javascript
Vue利用canvas实现移动端手写板的方法
2018/05/03 Javascript
微信小程序实现打卡日历功能
2020/09/21 Javascript
微信小程序云开发实现云数据库读写权限
2019/05/17 Javascript
JavaScript switch语句使用方法简介
2019/12/30 Javascript
jQuery实现手风琴效果(蒙版)
2020/01/11 jQuery
Python解决鸡兔同笼问题的方法
2014/12/20 Python
python实现的简单RPG游戏流程实例
2015/06/28 Python
分享Python切分字符串的一个不错方法
2018/12/14 Python
Pandas统计重复的列里面的值方法
2019/01/30 Python
Python3将数据保存为txt文件的方法
2019/09/12 Python
Python queue队列原理与应用案例分析
2019/09/27 Python
在Python中利用pickle保存变量的实例
2019/12/30 Python
Python3 操作 MySQL 插入一条数据并返回主键 id的实例
2020/03/02 Python
PyCharm永久激活方式(推荐)
2020/09/22 Python
jupyter notebook 使用过程中python莫名崩溃的原因及解决方式
2020/04/10 Python
HolidayLettings英国:预订最好的度假公寓、别墅和自助式住宿
2019/08/27 全球购物
酒店总经理岗位职责
2014/03/17 职场文书
商务宴请邀请函范文
2015/02/02 职场文书
公司人事任命通知
2015/04/20 职场文书
Spring this调用当前类方法无法拦截的示例代码
2022/03/20 Java/Android