pandas 透视表中文字段排序方法


Posted in Python onNovember 16, 2018

前几天有一个需求,透视表中的年级这一列要按照一年级,二年级这样的序列进行排序,但是用过透视表的人都知道,透视表对中文的排序不是太理想,放弃pandas自带的排序方法。测试了很久,想到一个办法。先把dataframe中需要特殊排序的列中的汉字转换成数字,然后生成透视表,生成透视表之后,再把透视表的index或者columns中的数字替换成相应的汉字,透视表的结果就会按照你想要的顺序进行排序。

def get_special_sort_data(self, groupby, columns):
 # 获取需要特殊处理的字段的信息
 special_sort_cols = None
 cols_in_index_or_column = None # 判断特殊排序字段在index还是column中
 if self.datasource.has_special_sort_cols:
  # 获取表需要处理的特殊字段信息
  special_sort_cols = self.datasource.get_sort_columns() # {"grade_name": {}}

  if special_sort_cols:
  i_intersection = list(set(groupby) & set(special_sort_cols.keys()))
  c_intersection = list(set(columns) & set(special_sort_cols.keys()))
  if i_intersection:
   cols_in_index_or_column = ('index', i_intersection)
  elif c_intersection:
   cols_in_index_or_column = ('column', c_intersection)
 return cols_in_index_or_column, special_sort_cols
cols_in_index_or_column, special_sort_cols = self.get_special_sort_data(groupby, columns) # special_sort_cols:{"grade_name": {"一年级": 1, "二年级":2, "三年级": 3 ....}}

if cols_in_index_or_column:
 for col in cols_in_index_or_column[1]:
 df[col] = df[col].replace(special_sort_cols.get(col)) # 替换df

# 获取透视表
if cols_in_index_or_column:
 if cols_in_index_or_column[0] == 'index':
  if len(groupby) == 1:
   col_name = cols_in_index_or_column[1][0]
   sort_info = special_sort_cols.get(col_name)
   r_sort_info = {v:k for k, v in zip(sort_info.keys(), sort_info.values())}
   index_1 = df.index.tolist()
   index_1 = [r_sort_info.get(item) for item in index_1]
   df.index = Index(index_1, name=df.index.name)
  else:
   for item in cols_in_index_or_column[1]:
   ix = df.index.names.index(item)
   index_1 = df.index.levels[ix].tolist()
   sort_info = special_sort_cols.get(item)
   r_sort_info = {v: k for k, v in zip(sort_info.keys(), sort_info.values())}
   index_1 = [r_sort_info.get(item) for item in index_1]
   df.index = df.index.set_levels(index_1, level=ix)
 else:
  for item in cols_in_index_or_column[1]:
  ix = df.columns.names.index(item)
  col_1 = df.columns.levels[ix].tolist()
  sort_info = special_sort_cols.get(item)
  r_sort_info = {v: k for k, v in zip(sort_info.keys(), sort_info.values())}
  col_1 = [r_sort_info.get(item) for item in col_1]
  df.columns = df.columns.set_levels(col_1, level=ix)

以上这篇pandas 透视表中文字段排序方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python单元测试框架unittest使用方法讲解
Apr 13 Python
python paramiko模块学习分享
Aug 23 Python
Python堆排序原理与实现方法详解
May 11 Python
Python日期时间对象转换为字符串的实例
Jun 22 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
Nov 14 Python
解决Python运行文件出现out of memory框的问题
Dec 03 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
Dec 17 Python
Python之Class&Object用法详解
Dec 25 Python
python实现图像拼接功能
Mar 23 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
Apr 22 Python
Python如何输出百分比
Jul 31 Python
Python selenium模拟网页点击爬虫交管12123违章数据
May 26 Python
用Python实现数据的透视表的方法
Nov 16 #Python
pandas pivot_table() 按日期分多列数据的方法
Nov 16 #Python
python生成以及打开json、csv和txt文件的实例
Nov 16 #Python
python判断列表的连续数字范围并分块的方法
Nov 16 #Python
Python 数值区间处理_对interval 库的快速入门详解
Nov 16 #Python
Pandas Shift函数的基础入门学习笔记
Nov 16 #Python
Python补齐字符串长度的实例
Nov 15 #Python
You might like
PHP实现用户认证及管理完全源码
2007/03/11 PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
2013/08/05 PHP
33道php常见面试题及答案
2015/07/06 PHP
PHP标准类(stdclass)用法示例
2016/09/28 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
2016/11/14 PHP
javascript 学习之旅 (3)
2009/02/05 Javascript
SyntaxHighlighter语法高亮插件使用说明
2011/08/14 Javascript
Javascript倒计时页面跳转实例小结
2013/09/11 Javascript
原生JS操作网页给p元素添加onclick事件及表格隔行变色
2013/12/01 Javascript
nodejs读取memcache示例分享
2014/01/02 NodeJs
JS+CSS模拟可以无刷新显示内容的留言板实例
2015/03/03 Javascript
简介JavaScript中的sub()方法的使用
2015/06/08 Javascript
jQuery AJAX timeout 超时问题详解
2016/06/21 Javascript
js移动焦点到最后位置的简单方法
2016/11/25 Javascript
详解通过源码解析Node.js中cluster模块的主要功能实现
2018/05/16 Javascript
js实现input密码框显示/隐藏功能
2020/09/10 Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
2018/11/29 Javascript
js数据类型转换与流程控制操作实例分析
2019/12/18 Javascript
Vue切换组件实现返回后不重置数据,保留历史设置操作
2020/07/21 Javascript
element-ui中dialog弹窗关闭按钮失效的解决
2020/09/22 Javascript
[01:11]回顾历届DOTA2国际邀请赛中国区预选赛
2017/06/26 DOTA
[00:32]2018DOTA2亚洲邀请赛EG出场
2018/04/03 DOTA
[01:22:19]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
Python向日志输出中添加上下文信息
2017/05/24 Python
Python爬虫DNS解析缓存方法实例分析
2017/06/02 Python
Python入门必须知道的11个知识点
2018/03/21 Python
Python实现的爬取网易动态评论操作示例
2018/06/06 Python
对python中类的继承与方法重写介绍
2019/01/20 Python
Python+OpenCV+图片旋转并用原底色填充新四角的例子
2019/12/12 Python
tensorflow对图像进行拼接的例子
2020/02/05 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
2020/05/13 Python
Python偏函数Partial function使用方法实例详解
2020/06/17 Python
Python如何读写字节数据
2020/08/05 Python
python爬虫scrapy图书分类实例讲解
2020/11/23 Python
科学育儿宣传标语
2014/10/08 职场文书
2016年党校科级干部培训班学习心得体会
2016/01/06 职场文书