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 相关文章推荐
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
Dec 03 Python
详解Python的Twisted框架中reactor事件管理器的用法
May 25 Python
Python 爬虫学习笔记之正则表达式
Sep 21 Python
[原创]python爬虫(入门教程、视频教程)
Jan 08 Python
Python实现二叉搜索树BST的方法示例
Jul 30 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
Aug 13 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
Sep 05 Python
Python日期格式和字符串格式相互转换的方法
Feb 18 Python
浅谈Python中的异常和JSON读写数据的实现
Feb 27 Python
python实现字符串和数字拼接
Mar 02 Python
全网首秀之Pycharm十大实用技巧(推荐)
Apr 27 Python
python 如何执行控制台命令与操作剪切板
May 20 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
批量获取memcache值并按key的顺序返回的实现代码
2011/06/14 PHP
使用PHP Socket写的POP3类
2013/10/30 PHP
深入理解PHP JSON数组与对象
2016/07/19 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
2019/02/15 PHP
JavaScript 字符串连接性能优化
2008/12/20 Javascript
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
2009/12/04 Javascript
本地对象Array的原型扩展实现代码
2010/12/04 Javascript
JavaScript中去掉数组中的重复值的实现方法
2011/08/03 Javascript
jquery选择器的选择使用及性能介绍
2013/01/16 Javascript
javascript继承机制实例详解
2014/11/20 Javascript
使用原生JS实现弹出层特效
2014/12/22 Javascript
jQuery+html5+css3实现圆角无刷新表单带输入验证功能代码
2015/08/21 Javascript
JavaScript常用本地对象小结
2016/03/28 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
2017/01/04 Javascript
Vue.js学习教程之列表渲染详解
2017/05/17 Javascript
javascript简单写的判断电话号码实例
2017/05/24 Javascript
使用PDB模式调试Python程序介绍
2015/04/05 Python
Python基于回溯法子集树模板解决m着色问题示例
2017/09/07 Python
Python 高级专用类方法的实例详解
2017/09/11 Python
Python爬虫之正则表达式基本用法实例分析
2018/08/08 Python
Python SMTP发送邮件遇到的一些问题及解决办法
2018/10/24 Python
python版飞机大战代码分享
2018/11/20 Python
使用python绘制二元函数图像的实例
2019/02/12 Python
python文件转为exe文件的方法及用法详解
2019/07/08 Python
python中return不返回值的问题解析
2020/07/22 Python
python利用platform模块获取系统信息
2020/10/09 Python
美丽的现代设计家具:2Modern
2018/07/26 全球购物
获奖的大学生创业计划书
2014/01/05 职场文书
教学器材管理制度
2014/01/26 职场文书
酒店营销策划方案
2014/02/07 职场文书
2014厂务公开实施方案
2014/02/17 职场文书
小学教师评语大全
2014/04/23 职场文书
党的群众路线教育实践方案
2014/05/11 职场文书
政府四风问题整改措施
2014/10/04 职场文书
山楂树之恋观后感
2015/06/11 职场文书
Linux7.6二进制安装Mysql8.0.27详细操作步骤
2021/11/27 MySQL