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 16 Python
Python编程实现的简单神经网络算法示例
Jan 26 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
May 19 Python
python实现验证码识别功能
Jun 07 Python
详解10个可以快速用Python进行数据分析的小技巧
Jun 24 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
Feb 27 Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
Mar 12 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
Apr 11 Python
Python叠加矩形框图层2种方法及效果
Jun 18 Python
Selenium webdriver添加cookie实现过程详解
Aug 12 Python
Visual Studio code 配置Python开发环境
Sep 11 Python
Python超详细分步解析随机漫步
Mar 17 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 curl获取网页内容(IPV6下超时)的解决办法
2013/07/16 PHP
PHP图片处理之图片背景、画布操作
2014/11/19 PHP
PHP加密解密类实例代码
2016/07/20 PHP
PHP设计模式之命令模式示例详解
2020/12/20 PHP
jquery 插件 web2.0分格的分页脚本,可用于ajax无刷新分页
2008/12/25 Javascript
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
2009/12/07 Javascript
jQueryPad 实用的jQuery测试工具(支持IE,chrome,FF)
2010/05/22 Javascript
javascript图片预加载完整实例
2015/12/10 Javascript
Javascript实现前端简单的路由实例
2016/09/11 Javascript
JS限定手机版中图片大小随分辨率自动调整的方法
2016/12/05 Javascript
那些精彩的JavaScript代码片段
2017/01/12 Javascript
JS字符串长度判断,超出进行自动截取的实例(支持中文)
2017/03/06 Javascript
JS图片轮播与索引变色功能实例详解
2017/07/06 Javascript
使用Webpack提高Vue.js应用的方式汇总(四种)
2017/07/10 Javascript
基于JavaScript实现五子棋游戏
2020/08/26 Javascript
vue实现自定义多选与单选的答题功能
2018/07/05 Javascript
微信小程序实现滴滴导航tab切换效果
2018/07/24 Javascript
使用 Opentype.js 生成字体子集的实例代码详解
2020/05/25 Javascript
Python3.0与2.X版本的区别实例分析
2014/08/25 Python
python数据类型_字符串常用操作(详解)
2017/05/30 Python
Python3中正则模块re.compile、re.match及re.search函数用法详解
2018/06/11 Python
python使用phoenixdb操作hbase的方法示例
2019/02/28 Python
Python3实现从排序数组中删除重复项算法分析
2019/04/03 Python
Python魔术方法专题
2020/06/19 Python
Python字符串查找基本操作代码案例
2020/10/27 Python
python爬取招聘要求等信息实例
2020/11/20 Python
45个非常奇妙的CSS3 特性应用示例
2012/01/01 HTML / CSS
彼得罗夫美国官网:Peter Thomas Roth美国(青瓜面膜)
2017/11/05 全球购物
台湾SHOPRO购物行家:亚洲首创影视.3C.家电.优质购物平台
2018/05/07 全球购物
澳大利亚珠宝商:Shiels
2019/10/06 全球购物
上海方立数码笔试题
2013/10/18 面试题
党校个人自我鉴定范文
2014/03/28 职场文书
人力资源求职信
2014/05/25 职场文书
2016年小学生寒假总结
2015/10/10 职场文书
Axios代理配置及封装响应拦截处理方式
2022/04/07 Vue.js