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 logging模块学习笔记
May 24 Python
Python写的服务监控程序实例
Jan 31 Python
详解Python验证码识别
Jan 25 Python
Python中的多行注释文档编写风格汇总
Jun 16 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
May 21 Python
Django中的ajax请求
Oct 19 Python
python三方库之requests的快速上手
Mar 04 Python
解决flask接口返回的内容中文乱码的问题
Apr 03 Python
Pycharm生成可执行文件.exe的实现方法
Jun 02 Python
基于Python组装jmx并调用JMeter实现压力测试
Nov 03 Python
Python中tkinter的用户登录管理的实现
Apr 22 Python
pandas中对文本类型数据的处理小结
Nov 01 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
CURL的学习和应用(附多线程实现)
2013/06/03 PHP
discuz目录文件资料汇总
2014/12/30 PHP
PHP实现的自定义数组排序函数与排序类示例
2016/11/18 PHP
微信开发之获取JSAPI TICKET
2017/07/07 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
JavaScript子窗口ModalDialog中操作父窗口对像
2012/12/11 Javascript
js从10种颜色中随机取色实现每次取出不同的颜色
2013/10/23 Javascript
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
Jquery操作js数组及对象示例代码
2014/05/11 Javascript
详谈JavaScript 匿名函数及闭包
2014/11/14 Javascript
javascript结合Canvas 实现简易的圆形时钟
2015/03/11 Javascript
javascript实现随机读取数组的方法
2015/08/03 Javascript
jQuery+PHP实现可编辑表格字段内容并实时保存
2015/10/09 Javascript
HTML5 实现的一个俄罗斯方块实例代码
2016/09/19 Javascript
jsonp跨域请求实现示例
2017/03/13 Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
2018/02/05 Javascript
实例详解Node.js 函数
2018/06/10 Javascript
vue.js动画中的js钩子函数的实现
2018/07/06 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
layui实现文件或图片上传记录
2018/08/28 Javascript
vue+element加入签名效果(移动端可用)
2019/06/17 Javascript
Vue.js自定义指令学习使用详解
2019/10/19 Javascript
vue学习笔记之Vue中css动画原理简单示例
2020/02/29 Javascript
简介JavaScript错误处理机制
2020/08/04 Javascript
[01:05]DOTA2完美大师赛趣味视频之选手教你打职业
2017/11/23 DOTA
解密Python中的描述符(descriptor)
2015/06/03 Python
python sorted函数的小练习及解答
2019/09/18 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
浅析Python 字符编码与文件处理
2020/09/24 Python
python爬虫用request库处理cookie的实例讲解
2021/02/20 Python
小学英语教学反思案例
2014/02/04 职场文书
在校大学生的职业生涯规划书
2014/03/14 职场文书
合作协议书怎么写
2014/04/18 职场文书
关于实现中国梦的心得体会
2016/01/05 职场文书
小学生一年级(书信作文)
2019/08/13 职场文书
MySQL 原理优化之Group By的优化技巧
2022/08/14 MySQL