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实现计算资源图标crc值的方法
Oct 05 Python
python利用lxml读写xml格式的文件
Aug 10 Python
Python3.4编程实现简单抓取爬虫功能示例
Sep 14 Python
解决python nohup linux 后台运行输出的问题
May 11 Python
python输出100以内的质数与合数实例代码
Jul 08 Python
python处理DICOM并计算三维模型体积
Feb 26 Python
Python一个简单的通信程序(客户端 服务器)
Mar 06 Python
pytz格式化北京时间多出6分钟问题的解决方法
Jun 21 Python
jupyter 实现notebook中显示完整的行和列
Apr 09 Python
Django DRF路由与扩展功能的实现
Jun 03 Python
如何在vscode中安装python库的方法步骤
Jan 06 Python
在 Golang 中实现 Cache::remember 方法详解
Mar 30 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和ACCESS写聊天室(五)
2006/10/09 PHP
php数组函数序列之array_flip() 将数组键名与值对调
2011/11/07 PHP
php学习笔记之基础知识
2014/11/08 PHP
php 字符串中是否包含指定字符串的多种方法
2018/04/12 PHP
Javascript拓展String方法小结
2013/07/08 Javascript
javascript中$(function() {});写与不写有哪些区别
2015/08/10 Javascript
JavaScript文本框脚本编写的注意事项
2016/01/25 Javascript
基于jQuery日历插件制作日历
2016/03/11 Javascript
深入理解JS中的Function.prototype.bind()方法
2016/10/11 Javascript
原生js实现倒计时--2018
2017/02/21 Javascript
JavaScript之underscore_动力节点Java学院整理
2017/07/03 Javascript
redux-saga 初识和使用
2018/03/10 Javascript
[02:45]2016年中国刀塔全程回顾,完美“圣”典即将上演
2016/12/15 DOTA
SQLite3中文编码 Python的实现
2017/01/11 Python
python中 chr unichr ord函数的实例详解
2017/08/06 Python
python数字图像处理之高级滤波代码详解
2017/11/23 Python
python广度优先搜索得到两点间最短路径
2019/01/17 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
2019/02/12 Python
Django 反向生成url实例详解
2019/07/30 Python
python连接mongodb集群方法详解
2020/02/13 Python
Python3运算符常见用法分析
2020/02/14 Python
Python响应对象text属性乱码解决方案
2020/03/31 Python
Python爬虫获取豆瓣电影并写入excel
2020/07/31 Python
Python 如何在字符串中插入变量
2020/08/01 Python
Python Request类源码实现方法及原理解析
2020/08/17 Python
Ray-Ban雷朋奥地利官网:全球领先的太阳眼镜品牌
2020/10/12 全球购物
Tea Collection官网:一家位于旧金山的童装公司
2020/08/07 全球购物
几道Web/Ajax的面试题
2016/11/05 面试题
房地产开发计划书
2014/01/10 职场文书
五一手机促销方案
2014/03/08 职场文书
大班幼儿评语大全
2014/04/30 职场文书
中国梦读书活动总结
2014/07/10 职场文书
光学与应用专业毕业生求职信
2014/09/01 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
2016年共产党员个人承诺书
2016/03/24 职场文书
导游词之南京栖霞山
2019/10/18 职场文书