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中字符串前面加r的作用
Jun 04 Python
Python自定义类的数组排序实现代码
Aug 28 Python
python实现BackPropagation算法
Dec 14 Python
Python3实现的画图及加载图片动画效果示例
Jan 19 Python
Django中cookie的基本使用方法示例
Feb 03 Python
Django1.9 加载通过ImageField上传的图片方法
May 25 Python
对Django url的几种使用方式详解
Aug 06 Python
python3-flask-3将信息写入日志的实操方法
Nov 12 Python
python之pymysql模块简单应用示例代码
Dec 16 Python
python库skimage给灰度图像染色的方法示例
Apr 27 Python
PyQt5 控件字体样式等设置的实现
May 13 Python
MxNet预训练模型到Pytorch模型的转换方式
May 25 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 has encountered an Access Violation
2007/01/15 PHP
PHP设计模式之调解者模式的深入解析
2013/06/13 PHP
PHP实现利用MySQL保存session的方法
2014/08/23 PHP
php中动态调用函数的方法
2015/03/16 PHP
PHP实现简单实用的分页类代码
2016/04/08 PHP
javascript 清除输入框中的数据
2009/04/13 Javascript
JavaScript全局函数使用简单说明
2011/03/11 Javascript
chrome调试javascript详解
2015/10/21 Javascript
javascript jquery对form元素的常见操作详解
2016/06/12 Javascript
js+css3实现旋转效果
2017/01/20 Javascript
js正则表达式验证密码强度【推荐】
2017/03/03 Javascript
微信小程序开发之入门实例教程篇
2017/03/07 Javascript
React-router 4 按需加载的实现方式及原理详解
2017/05/25 Javascript
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
Vue项目中添加锁屏功能实现思路
2018/06/29 Javascript
js实现轮播图特效
2020/05/28 Javascript
[03:48]DOTA2完美大师赛主赛事第二日精彩集锦
2017/11/24 DOTA
解决pyqt中ui编译成窗体.py中文乱码的问题
2016/12/23 Python
python实现将excel文件转化成CSV格式
2018/03/22 Python
详解Python 数据库的Connection、Cursor两大对象
2018/06/25 Python
opencv与numpy的图像基本操作
2019/03/08 Python
Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法
2019/08/26 Python
如何分离django中的媒体、静态文件和网页
2019/11/12 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
2020/03/24 Python
用python进行视频剪辑
2020/11/02 Python
Python 中的函数装饰器和闭包详解
2021/02/06 Python
Css3新特性应用之形状总结
2016/12/08 HTML / CSS
美国购买汽车零件网站:Buy Auto Parts
2018/04/02 全球购物
护理专业自荐信范文
2014/02/26 职场文书
心理咨询承诺书
2014/05/20 职场文书
今冬明春火灾防控工作方案
2014/05/29 职场文书
大学毕业生个人自荐书
2014/07/02 职场文书
客户答谢会致辞
2015/01/20 职场文书
幼儿园家长工作总结2015
2015/04/25 职场文书
彻底理解golang中什么是nil
2021/04/29 Golang
MySQL8.0.18配置多主一从
2021/06/21 MySQL