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 相关文章推荐
Pthon批量处理将pdb文件生成dssp文件
Jun 21 Python
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
Aug 30 Python
python扫描proxy并获取可用代理ip的实例
Aug 07 Python
通过python+selenium3实现浏览器刷简书文章阅读量
Dec 26 Python
python基础教程项目二之画幅好画
Apr 02 Python
在Python 中实现图片加框和加字的方法
Jan 26 Python
django 通过URL访问上传的文件方法
Jul 28 Python
Python如何计算语句执行时间
Nov 22 Python
Python调用graphviz绘制结构化图形网络示例
Nov 22 Python
python实现PCA降维的示例详解
Feb 24 Python
基于python实现上传文件到OSS代码实例
May 09 Python
Python列表嵌套常见坑点及解决方案
Sep 30 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+apc实现上传进度条且在IE7下不显示的问题解决方法
2013/04/25 PHP
sae使用smarty模板的方法
2013/12/17 PHP
使用CodeIgniter的类库做图片上传
2014/06/12 PHP
PHP环境中Memcache的安装和使用
2015/11/05 PHP
PHP实现截取中文字符串不出现?号的解决方法
2016/12/29 PHP
JQUERY的属性选择符和自定义选择符使用方法(二)
2011/04/07 Javascript
JavaScript中的View-Model使用介绍
2011/08/11 Javascript
通过js动态操作table(新增,删除相关列信息)
2012/05/23 Javascript
jquery单行文字向上滚动效果示例
2014/03/06 Javascript
js案例之鼠标跟随jquery版(实例讲解)
2017/07/21 jQuery
promise处理多个相互依赖的异步请求(实例讲解)
2017/08/03 Javascript
使用nodeJs来安装less及编译less文件为css文件的方法
2017/11/20 NodeJs
微信小程序蓝牙连接小票打印机实例代码详解
2019/06/03 Javascript
JavaScript中变量提升和函数提升的详解
2020/08/07 Javascript
[55:44]OG vs NAVI 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python程序设计入门(1)基本语法简介
2014/06/13 Python
在Python中使用SimpleParse模块进行解析的教程
2015/04/11 Python
python实现连接mongodb的方法
2015/05/08 Python
Python赋值语句后逗号的作用分析
2015/06/08 Python
Python爬虫工程师面试问题总结
2018/03/22 Python
PyCharm代码格式调整方法
2018/05/23 Python
python实现从ftp服务器下载文件
2020/03/03 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
Python+unittest+requests 接口自动化测试框架搭建教程
2020/10/09 Python
Html5页面在微信端的分享的实现方法
2018/08/30 HTML / CSS
详解Canvas事件绑定
2018/06/27 HTML / CSS
阿波罗盒子:Apollo Box
2017/08/14 全球购物
Under Armour安德玛法国官网:美国高端运动科技品牌
2018/06/29 全球购物
新闻记者实习自我鉴定
2013/09/19 职场文书
材料成型专业个人求职信范文
2013/09/25 职场文书
前台接待的工作职责
2013/11/21 职场文书
优秀员工演讲稿
2014/05/19 职场文书
办理护照工作证明
2014/10/10 职场文书
学生检讨书怎么写
2015/05/07 职场文书
民间借贷借条范本
2015/05/25 职场文书
python 统计代码耗时的几种方法分享
2021/04/02 Python