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备份文件以及mysql数据库的脚本代码
Jun 10 Python
python用字典统计单词或汉字词个数示例
Apr 22 Python
跟老齐学Python之关于类的初步认识
Oct 11 Python
Python字符串详细介绍
May 09 Python
Python实现的tcp端口检测操作示例
Jul 24 Python
在scrapy中使用phantomJS实现异步爬取的方法
Dec 17 Python
Python3 单行多行万能正则匹配方法
Jan 07 Python
python使用pygame模块实现坦克大战游戏
Mar 25 Python
python基础教程之while循环
Aug 14 Python
python SVD压缩图像的实现代码
Nov 05 Python
Python求正态分布曲线下面积实例
Nov 20 Python
python logging 日志的级别调整方式
Feb 21 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
WINXP下apache+php4+mysql
2006/11/25 PHP
利用discuz实现PHP大文件上传应用实例代码
2008/11/14 PHP
Yii2中如何使用modal弹窗(基本使用)
2016/05/30 PHP
php操作xml并将其插入数据库的实现方法
2016/09/08 PHP
PHP实现留言板功能的详细代码
2017/03/25 PHP
老生常谈PHP 文件写入和读取(必看篇)
2017/05/22 PHP
jquery nth-child()选择器的简单应用
2010/07/10 Javascript
Javascript设计模式之观察者模式的多个实现版本实例
2015/03/03 Javascript
js为什么不能正确处理小数运算?
2015/12/29 Javascript
JavaScript门面模式详解
2017/10/19 Javascript
使用elementUI实现将图片上传到本地的示例
2018/09/04 Javascript
swiper在angularjs中使用循环轮播失效的解决方法
2018/09/27 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
2019/09/03 Javascript
解决vant title-active-color与title-inactive-color不生效问题
2020/11/03 Javascript
[58:00]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第二场 2月7日
2021/03/11 DOTA
python 矩阵增加一行或一列的实例
2018/04/04 Python
python:print格式化输出到文件的实例
2018/05/14 Python
详解python执行shell脚本创建用户及相关操作
2019/04/11 Python
Django如何自定义model创建数据库索引的顺序
2019/06/20 Python
Django Rest framework三种分页方式详解
2019/07/26 Python
Python实现TCP探测目标服务路由轨迹的原理与方法详解
2019/09/04 Python
python多线程案例之多任务copy文件完整实例
2019/10/29 Python
PyCharm 2019.3发布增加了新功能一览
2019/12/08 Python
python中count函数简单用法
2020/01/05 Python
python实现学生管理系统开发
2020/07/24 Python
Python爬虫之Selenium鼠标事件的实现
2020/12/04 Python
css3翻牌翻数字的示例代码
2020/02/07 HTML / CSS
HTML5 embed标签定义和用法详解
2014/05/09 HTML / CSS
Links of London官方网站:英国标志性的珠宝品牌
2017/04/09 全球购物
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
The North Face北面美国官网:美国著名户外品牌
2018/09/15 全球购物
干部个人考察材料
2014/12/24 职场文书
学法用法心得体会(2016推荐篇)
2016/01/21 职场文书
高三英语教学反思
2016/03/03 职场文书
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers