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中序列与字典的相同和不同之处
Jan 19 Python
python3+PyQt5重新实现自定义数据拖放处理
Apr 19 Python
11个Python3字典内置方法大全与示例汇总
May 13 Python
python如何给字典的键对应的值为字典项的字典赋值
Jul 05 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
Jul 11 Python
pip安装python库的方法总结
Aug 02 Python
python3实现弹弹球小游戏
Nov 25 Python
opencv3/C++实现视频背景去除建模(BSM)
Dec 11 Python
python调用c++返回带成员指针的类指针实例
Dec 12 Python
python 抓取知乎指定回答下视频的方法
Jul 09 Python
基于CentOS搭建Python Django环境过程解析
Aug 24 Python
详解numpy1.19.4与python3.9版本冲突解决
Dec 15 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 数组使用详解 推荐
2011/06/02 PHP
php在程序中将网页生成word文档并提供下载的代码
2012/10/09 PHP
PHP FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)
2014/05/10 PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
2015/12/22 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
2008/03/22 Javascript
Javascript typeof 用法
2008/12/28 Javascript
Iframe 自适应高度并实时监控高度变化的js代码
2009/10/30 Javascript
ASP小贴士/ASP Tips javascript tips可以当桌面
2009/12/10 Javascript
juqery 学习之三 选择器 子元素与表单
2010/11/25 Javascript
JS时间选择器 兼容IE6,7,8,9
2012/06/26 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
2014/01/02 Javascript
js中的json对象详细介绍
2014/10/29 Javascript
node.js中的fs.fchown方法使用说明
2014/12/16 Javascript
JS实现控制表格行文本对齐的方法
2015/03/30 Javascript
分享十五款 jQuery 社交网络分享插件
2015/05/16 Javascript
jQuery无刷新切换主题皮肤实例讲解
2015/10/21 Javascript
谈一谈jQuery核心架构设计
2016/03/28 Javascript
node.js的事件机制
2017/02/08 Javascript
JavaScript异步上传图片文件的实例代码
2017/07/04 Javascript
Vue实现一个返回顶部backToTop组件
2017/07/25 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
2019/09/10 Javascript
Python程序员鲜为人知但你应该知道的17个问题
2014/06/04 Python
最大K个数问题的Python版解法总结
2016/06/16 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
2019/04/11 Python
numpy.meshgrid()理解(小结)
2019/08/01 Python
wxPython电子表格功能wx.grid实例教程
2019/11/19 Python
Django 权限管理(permissions)与用户组(group)详解
2020/11/30 Python
HTML5页面直接调用百度地图API获取当前位置直接导航目的地的实现代码
2018/03/02 HTML / CSS
Marc Jacobs官方网站:美国奢侈品牌
2017/08/29 全球购物
linux面试题参考答案(4)
2014/09/21 面试题
专科应届生求职信
2013/11/24 职场文书
前台接待岗位职责
2013/12/03 职场文书
火车的故事教学反思
2014/02/11 职场文书
先进学校事迹材料
2014/12/30 职场文书
新手开公司创业注意事项有哪些?
2019/07/29 职场文书