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 18 Python
python开发之list操作实例分析
Feb 22 Python
Python进行数据提取的方法总结
Aug 22 Python
Python 通配符删除文件的实例
Apr 24 Python
Python使用pandas对数据进行差分运算的方法
Dec 22 Python
对Python函数设计规范详解
Jul 19 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
Aug 29 Python
Python numpy数组转置与轴变换
Nov 15 Python
TensorFlow实现打印每一层的输出
Jan 21 Python
python默认参数调用方法解析
Feb 09 Python
如何用python爬取微博热搜数据并保存
Feb 20 Python
python 三边测量定位的实现代码
Apr 22 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+MYSQL的文章管理系统(二)
2006/10/09 PHP
PHP提取字符串中的图片地址[正则表达式]
2011/11/12 PHP
解析百度搜索结果link?url=参数分析 (全)
2012/10/09 PHP
sae使用smarty模板的方法
2013/12/17 PHP
ThinkPHP中处理表单中的注意事项
2014/11/22 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
2019/04/02 PHP
ext实现完整的登录代码
2008/08/08 Javascript
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
2013/02/02 Javascript
js获取元素外链样式的方法
2015/01/27 Javascript
JS使用cookie设置样式的方法
2016/06/30 Javascript
javascript判断firebug是否开启的方法
2016/11/23 Javascript
JS克隆,属性,数组,对象,函数实例分析
2016/11/26 Javascript
全选复选框JavaScript编写小结(附代码)
2017/08/16 Javascript
Vue 权限控制的两种方法(路由验证)
2019/08/16 Javascript
axios如何利用promise无痛刷新token的实现方法
2019/08/27 Javascript
vue中添加与删除关键字搜索功能
2019/10/12 Javascript
JavaScript实现随机点名器
2020/03/25 Javascript
vue循环中点击选中再点击取消(单选)的实现
2020/09/10 Javascript
vue实现前端列表多条件筛选
2020/10/26 Javascript
[48:32]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs VG
2018/04/01 DOTA
python使用win32com在百度空间插入html元素示例
2014/02/20 Python
Python File readlines() 使用方法
2018/03/19 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
2018/05/16 Python
python 实现一次性在文件中写入多行的方法
2019/01/28 Python
Python的对象传递与Copy函数使用详解
2019/12/26 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
2020/03/04 Python
浅析canvas元素的html尺寸和css尺寸对元素视觉的影响
2019/07/22 HTML / CSS
建龙钢铁面试总结
2014/04/15 面试题
教师实习期自我鉴定
2013/10/06 职场文书
应聘医药代表职位求职信
2013/10/21 职场文书
十岁生日家长答谢词
2014/01/17 职场文书
电子信息工程专业自荐书
2014/06/24 职场文书
幼儿园六一儿童节演讲稿
2015/03/19 职场文书
2015年幼儿园大班工作总结
2015/04/25 职场文书
小学运动会宣传稿
2015/07/23 职场文书