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 strip lstrip rstrip使用方法
Sep 06 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
Jun 14 Python
Tensorflow加载预训练模型和保存模型的实例
Jul 27 Python
Django集成CAS单点登录的方法示例
Jun 10 Python
python tkinter canvas 显示图片的示例
Jun 13 Python
python如何实现代码检查
Jun 28 Python
python数据预处理 :数据共线性处理详解
Feb 24 Python
Python线程协作threading.Condition实现过程解析
Mar 12 Python
python 实现rolling和apply函数的向下取值操作
Jun 08 Python
keras 读取多标签图像数据方式
Jun 12 Python
Django如何在不停机的情况下创建索引
Aug 02 Python
python绘制雷达图实例讲解
Jan 03 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学习笔记(毕业设计)
2012/02/21 PHP
ThinkPHP写数组插入与获取最新插入数据ID实例
2014/11/03 PHP
PHP+Ajax+JS实现多图上传
2016/05/07 PHP
在 Laravel 中动态隐藏 API 字段的方法
2019/10/25 PHP
学习jquery之一
2007/04/27 Javascript
HTML中Select不用Disabled实现ReadOnly的效果
2008/04/07 Javascript
Tips 带三角可关闭的文字提示
2010/10/06 Javascript
javaScript实现浮点数转十六进制字符
2013/10/29 Javascript
JS模拟Dialog弹出浮动框效果代码
2015/10/16 Javascript
jquery实现横向图片轮播特效代码分享
2015/11/19 Javascript
AngularJS深入探讨scope,继承结构,事件系统和生命周期
2016/11/02 Javascript
微信小程序三级联动选择器使用方法
2020/05/19 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
详解Nuxt.js 实战集锦
2019/11/19 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
2020/09/09 Javascript
[01:20]DOTA2上海特级锦标赛现场采访:谁的ID最受青睐
2016/03/25 DOTA
使用Python的Treq on Twisted来进行HTTP压力测试
2015/04/16 Python
Python logging管理不同级别log打印和存储实例
2018/01/19 Python
Python使用pymysql从MySQL数据库中读出数据的方法
2018/07/25 Python
PyCharm代码回滚,恢复历史版本的解决方法
2018/10/22 Python
Python中shapefile转换geojson的示例
2019/01/03 Python
对python中字典keys,values,items的使用详解
2019/02/03 Python
Python multiprocess pool模块报错pickling error问题解决方法分析
2019/03/20 Python
基于python实现计算两组数据P值
2020/07/10 Python
Django+RestFramework API接口及接口文档并返回json数据操作
2020/07/12 Python
使用Python Tkinter实现剪刀石头布小游戏功能
2020/10/23 Python
Django中template for如何使用方法
2021/01/31 Python
AJAX检测用户名是否存在的方法
2021/03/24 Javascript
酒店司机岗位职责
2013/12/14 职场文书
写自荐信三大法宝
2014/01/24 职场文书
少先队学雷锋活动总结范文
2014/03/09 职场文书
学校师德师风自我剖析材料
2014/09/29 职场文书
商务考察邀请函模板
2015/02/02 职场文书
运动会报道稿大全
2015/07/23 职场文书
2015中秋节晚会开场白
2015/07/30 职场文书
使用canvas对video视频某一刻截图功能
2021/09/25 HTML / CSS