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语言的12个基础知识点小结
Jul 10 Python
Python中函数的用法实例教程
Sep 08 Python
Python贪吃蛇游戏编写代码
Oct 26 Python
python使用numpy读取、保存txt数据的实例
Oct 14 Python
Python 实现两个列表里元素对应相乘的方法
Nov 14 Python
一百行python代码将图片转成字符画
Feb 19 Python
Python3实现的简单工资管理系统示例
Mar 12 Python
在Django中预防CSRF攻击的操作
Mar 13 Python
Python接口自动化测试的实现
Aug 28 Python
利用Python实现朋友圈中的九宫格图片效果
Sep 03 Python
python 实现批量图片识别并翻译
Nov 02 Python
python与idea的集成的实现
Nov 20 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 上传文件类型判断函数(避免上传漏洞 )
2010/06/08 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解
2019/04/03 PHP
Yii2 queue的队列使用详解
2019/07/19 PHP
URL编码转换,escape() encodeURI() encodeURIComponent()
2006/12/27 Javascript
关于JavaScript定义类和对象的几种方式
2010/11/09 Javascript
Node.js模拟浏览器文件上传示例
2014/03/26 Javascript
JS长整型精度问题实例分析
2015/01/13 Javascript
jquery分割字符串的方法
2015/06/24 Javascript
javascript函数命名的三种方式及区别介绍
2016/03/22 Javascript
js和jQuery设置Opacity半透明 兼容IE6
2016/05/24 Javascript
微信小程序 获取相册照片实例详解
2016/11/16 Javascript
原生JS实现图片网格式渐显、渐隐效果
2017/06/05 Javascript
JavaScript实现新年倒计时效果
2018/11/17 Javascript
js canvas实现画图、滤镜效果
2018/11/27 Javascript
JQuery搜索框自动补全(模糊匹配)功能实现示例
2019/01/08 jQuery
Android 自定义view仿微信相机单击拍照长按录视频按钮
2019/07/19 Javascript
vue滚动tab跟随切换效果
2020/06/29 Javascript
vue移动端使用appClound拉起支付宝支付的实现方法
2019/11/21 Javascript
Python  __getattr__与__setattr__使用方法
2008/09/06 Python
Python中os和shutil模块实用方法集锦
2014/05/13 Python
python中lambda函数 list comprehension 和 zip函数使用指南
2014/09/28 Python
python实现读取excel写入mysql的小工具详解
2017/11/20 Python
django rest framework 数据的查找、过滤、排序的示例
2018/06/25 Python
Django model序列化为json的方法示例
2018/10/16 Python
python3 实现一行输入,空格隔开的示例
2018/11/14 Python
Python数据分析模块pandas用法详解
2019/09/04 Python
pytorch 实现打印模型的参数值
2019/12/30 Python
HomeAway的巴西品牌:Alugue Temporada
2018/04/10 全球购物
Opodo英国旅游网站:预订廉价航班、酒店和汽车租赁
2018/07/14 全球购物
后勤副校长自我鉴定
2013/10/13 职场文书
大学生志愿者感言
2014/01/15 职场文书
合作意向书模板
2014/03/31 职场文书
医学生求职自荐书
2014/06/12 职场文书
学生不讲诚信检讨书
2014/09/29 职场文书
Redis全局ID生成器的实现
2022/06/05 Redis