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的多态性实例分析
Jul 07 Python
Python操作Access数据库基本步骤分析
Sep 19 Python
Python_LDA实现方法详解
Oct 25 Python
numpy排序与集合运算用法示例
Dec 15 Python
Python实现的字典值比较功能示例
Jan 08 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
Jun 26 Python
Python 单元测试(unittest)的使用小结
Nov 14 Python
python 搭建简单的http server,可直接post文件的实例
Jan 03 Python
django连接mysql数据库及建表操作实例详解
Dec 10 Python
Python Dict找出value大于某值或key大于某值的所有项方式
Jun 05 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
Jun 15 Python
Django REST framework 限流功能的使用
Jun 24 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中使用正则表达式进行查找替换
2013/06/13 PHP
php和jquery实现地图区域数据统计展示数据示例
2014/02/12 PHP
PHP mysql事务问题实例分析
2016/01/18 PHP
PHP编程计算日期间隔天数的方法
2017/04/26 PHP
PHP生成指定范围内的N个不重复的随机数
2019/03/18 PHP
javascript vvorld 在线加密破解方法
2008/11/13 Javascript
JavaScript 克隆数组最简单的方法
2009/02/12 Javascript
在JavaScript中监听IME键盘输入事件
2011/05/29 Javascript
DWR实现模拟Google搜索效果实现原理及代码
2013/01/30 Javascript
JavaScript中的object转换函数toString()与valueOf()介绍
2014/12/31 Javascript
javascript变量声明实例分析
2015/04/25 Javascript
javascript设计模式之对象工厂函数与构造函数详解
2015/07/30 Javascript
JavaScript运动减速效果实例分析
2015/08/04 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
2016/06/21 Javascript
easyUI combobox实现联动效果
2017/01/17 Javascript
Vue2.0 从零开始_环境搭建操作步骤
2017/06/14 Javascript
自制简易打赏功能的实例
2017/09/02 Javascript
js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)
2017/09/19 Javascript
结合mint-ui移动端下拉加载实践方法总结
2017/11/08 Javascript
vue+mousemove实现鼠标拖动功能(拖动过快失效问题解决方法)
2018/08/24 Javascript
vue如何根据网站路由判断页面主题色详解
2018/11/02 Javascript
Vue中Axios从远程/后台读取数据
2019/01/21 Javascript
node实现爬虫的几种简易方式
2019/08/22 Javascript
Python基于回溯法子集树模板解决野人与传教士问题示例
2017/09/11 Python
tensorflow没有output结点,存储成pb文件的例子
2020/01/04 Python
基于keras中的回调函数用法说明
2020/06/17 Python
快速实现一个简单的canvas迷宫游戏的示例
2018/07/04 HTML / CSS
科室工作的个人自我评价
2013/10/30 职场文书
博士学位自我鉴定范文
2013/12/26 职场文书
乡镇网格化管理实施方案
2014/03/23 职场文书
疾病捐款倡议书
2014/05/13 职场文书
学雷锋志愿者活动总结
2014/06/27 职场文书
学习党章的体会
2014/11/07 职场文书
校园新闻稿范文
2015/07/18 职场文书
车间班组长竞聘书
2015/09/15 职场文书
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python