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脚本关闭文件操作的机制
Jun 28 Python
详解Python使用simplejson模块解析JSON的方法
Mar 24 Python
python监控linux内存并写入mongodb(推荐)
Sep 11 Python
详解Python使用tensorflow入门指南
Feb 09 Python
python 判断网络连通的实现方法
Apr 22 Python
Python爬取个人微信朋友信息操作示例
Aug 03 Python
使用Python处理BAM的方法
Sep 28 Python
Python读写文件基础知识点
Jun 10 Python
Django ModelForm组件使用方法详解
Jul 23 Python
python3使用GUI统计代码量
Sep 18 Python
详解Python函数print用法
Jun 18 Python
 Python 中 logging 模块使用详情
Mar 03 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
日本因肺炎疫情影响,这几部动漫推延播放!
2020/03/03 日漫
索尼SONY ICF-SW7600GR电路分析与改良
2021/03/02 无线电
PHP命名空间(Namespace)简明教程
2014/06/11 PHP
Extjs4 消息框去掉关闭按钮(类似Ext.Msg.alert)
2013/04/02 Javascript
JS应用正则表达式转换大小写示例
2014/09/18 Javascript
JQuery页面地址处理插件jqURL详解
2015/05/03 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
JavaScript实现Fly Bird小游戏
2016/12/15 Javascript
js获取隐藏元素的宽高
2017/02/24 Javascript
使用vue制作FullPage页面滚动效果
2017/08/21 Javascript
JavaScript学习笔记之函数记忆
2017/09/06 Javascript
JS数组求和的常用方法总结【5种方法】
2019/01/14 Javascript
详解express使用vue-router的history踩坑
2019/06/05 Javascript
Javascript var变量删除原理及实现
2020/08/26 Javascript
[01:43]倾听DOTA2英雄之声 魅惑魔女国服配音鉴赏
2013/06/06 DOTA
python获取一组汉字拼音首字母的方法
2015/07/01 Python
基于python的多进程共享变量正确打开方式
2018/04/28 Python
Python 实现引用其他.py文件中的类和类的方法
2018/04/29 Python
Python 获取windows桌面路径的5种方法小结
2019/07/15 Python
Python中pymysql 模块的使用详解
2019/08/12 Python
pycharm软件实现设置自动保存操作
2020/06/08 Python
关于tensorflow softmax函数用法解析
2020/06/30 Python
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
利用 Canvas实现绘画一个未闭合的带进度条的圆环
2019/07/26 HTML / CSS
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
纽约海:Sea New York
2018/11/04 全球购物
生产部主管岗位职责
2014/01/06 职场文书
广告词串烧
2014/03/19 职场文书
指导教师评语
2014/04/26 职场文书
销售顾问工作计划书
2014/09/15 职场文书
党员个人承诺书
2015/04/27 职场文书
活动经费申请报告
2015/05/15 职场文书
2015迎新晚会活动总结
2015/07/16 职场文书
工人先锋号事迹材料(2016精选版)
2016/03/01 职场文书
python自动化操作之动态验证码、滑动验证码的降噪和识别
2021/08/30 Python
Vue router配置与使用分析讲解
2022/12/24 Vue.js