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程序语言快速上手教程
Jul 18 Python
python实现TCP服务器端与客户端的方法详解
Apr 30 Python
Python正规则表达式学习指南
Aug 02 Python
python数据类型_元组、字典常用操作方法(介绍)
May 30 Python
Python 处理数据的实例详解
Aug 10 Python
Django中的CBV和FBV示例介绍
Feb 25 Python
详解如何用TensorFlow训练和识别/分类自定义图片
Aug 05 Python
使用python批量转换文件编码为UTF-8的实现
Apr 03 Python
Python字符串函数strip()原理及用法详解
Jul 23 Python
Pycharm操作Git及GitHub的步骤详解
Oct 27 Python
python实现图片,视频人脸识别(opencv版)
Nov 18 Python
python 进制转换 int、bin、oct、hex的原理
Jan 13 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实现的验证码文件类实例
2015/06/18 PHP
PHP简单实现文本计数器的方法
2016/04/28 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解
2010/04/29 Javascript
javascript最常用与实用的创建类的代码
2010/08/12 Javascript
jquery动态增加删除表格行的小例子
2013/11/14 Javascript
鼠标滚轮改变图片大小的示例代码
2013/11/20 Javascript
jfinal与bootstrap的登录跳转实战演习
2015/09/22 Javascript
纯javascript实现自动发送邮件
2015/10/21 Javascript
jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】
2016/09/14 Javascript
canvas 实现中国象棋
2017/02/17 Javascript
Mongoose经常返回e11000 error的原因分析
2017/03/29 Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
2018/09/18 Javascript
利用JS响应式修改vue实现页面的input值
2019/09/02 Javascript
基于vue+echarts 数据可视化大屏展示的方法示例
2020/03/09 Javascript
vue实现图片裁剪后上传
2020/12/16 Vue.js
Python深入学习之装饰器
2014/08/31 Python
Python中的ConfigParser模块使用详解
2015/05/04 Python
Go语言基于Socket编写服务器端与客户端通信的实例
2016/02/19 Python
利用python写个下载teahour音频的小脚本
2017/05/08 Python
tensorflow获取变量维度信息
2018/03/10 Python
Python学习_几种存取xls/xlsx文件的方法总结
2018/05/03 Python
Python单元测试实例详解
2018/05/25 Python
Python通用循环的构造方法实例分析
2018/12/19 Python
详解python中sort排序使用
2019/03/23 Python
2020最新pycharm汉化安装(python工程狮亲测有效)
2020/04/26 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
2020/10/12 Python
MIKI HOUSE美国官方网上商店:日本领先的婴儿和儿童高级时装品牌
2020/06/21 全球购物
艺术爱好者的自我评价分享
2013/10/08 职场文书
简单的大学生自我鉴定
2014/02/18 职场文书
《神奇的克隆》教学反思
2014/04/10 职场文书
学校安全防火方案
2014/06/07 职场文书
村主任群众路线个人对照检查材料
2014/09/26 职场文书
2014年党支部书记工作总结
2014/12/04 职场文书
职场:企业印章管理制度(模板)
2019/10/18 职场文书
MySQL中order by的执行过程
2022/06/05 MySQL