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 相关文章推荐
linux下安装easy_install的方法
Feb 10 Python
python读取TXT到数组及列表去重后按原来顺序排序的方法
Jun 26 Python
Python引用传值概念与用法实例小结
Oct 07 Python
浅谈Python peewee 使用经验
Oct 20 Python
解析Python中的eval()、exec()及其相关函数
Dec 20 Python
pycharm+django创建一个搜索网页实例代码
Jan 24 Python
python学习笔记--将python源文件打包成exe文件(pyinstaller)
May 26 Python
Python创建或生成列表的操作方法
Jun 19 Python
TensorFlow 显存使用机制详解
Feb 03 Python
详解python itertools功能
Feb 07 Python
python tkinter的消息框模块(messagebox,simpledialog)
Nov 07 Python
Python数据分析之pandas函数详解
Apr 21 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
php实现加减法验证码代码
2014/02/14 PHP
Yii学习总结之安装配置
2015/02/22 PHP
php中使用base HTTP验证的方法
2015/04/20 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
php实现中文转数字
2016/02/18 PHP
WordPress过滤垃圾评论的几种主要方法小结
2016/07/11 PHP
php 二维数组时间排序实现代码
2016/11/19 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
2017/03/23 PHP
jQuery bxCarousel实现图片滚动切换效果示例代码
2013/05/15 Javascript
js读取注册表的键值示例
2013/09/25 Javascript
php is_numberic函数造成的SQL注入漏洞
2014/03/10 Javascript
Jquery焦点图实例代码
2014/11/25 Javascript
js点击选择文本的方法
2015/02/09 Javascript
JavaScript中数据结构与算法(五):经典KMP算法
2015/06/19 Javascript
Angularjs注入拦截器实现Loading效果
2015/12/28 Javascript
JavaScript记录光标在编辑器中位置的实现方法
2016/04/22 Javascript
AngularJS中的DOM操作用法分析
2016/11/04 Javascript
Bootstrap php制作动态分页标签
2016/12/23 Javascript
深入探究angular2 UI组件之primeNG用法
2017/07/26 Javascript
利用adb shell和node.js实现抖音自动抢红包功能(推荐)
2018/02/22 Javascript
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
2019/06/14 Javascript
JS实现购物车基本功能
2020/11/08 Javascript
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[01:10:03]OG vs EG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
python使用pymysql实现操作mysql
2016/09/13 Python
用Python设计一个经典小游戏
2017/05/15 Python
Python实现的查询mysql数据库并通过邮件发送信息功能
2018/05/17 Python
Django自定义模板过滤器和标签的实现方法
2019/08/21 Python
Tensorflow之梯度裁剪的实现示例
2020/03/08 Python
CSS3 实现飘动的云朵动画
2020/12/01 HTML / CSS
canvas简单连线动画的实现代码
2020/02/04 HTML / CSS
什么是Linux虚拟文件系统VFS
2012/01/31 面试题
公司年会主持词
2014/03/22 职场文书
舞蹈教育学专业自荐信
2014/06/15 职场文书
课外访万家心得体会
2014/09/03 职场文书
Oracle笔记
2021/04/05 Oracle