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编写一个每天都在系统下新建一个文件夹的脚本
May 04 Python
Python实现多线程抓取网页功能实例详解
Jun 08 Python
使用Python爬取最好大学网大学排名
Feb 24 Python
Python2和Python3中urllib库中urlencode的使用注意事项
Nov 26 Python
Python 单例设计模式用法实例分析
Sep 23 Python
Pandas+Matplotlib 箱式图异常值分析示例
Dec 09 Python
python每5分钟从kafka中提取数据的例子
Dec 23 Python
最新2019Pycharm安装教程 亲测
Feb 28 Python
详解python tcp编程
Aug 24 Python
浅谈anaconda python 版本对应关系
Oct 07 Python
关于Python错误重试方法总结
Jan 03 Python
Python如何利用pandas读取csv数据并绘图
Jul 07 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/04 星际争霸
PHP 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性
2006/10/09 PHP
php使HTML标签自动补全闭合函数代码
2012/10/04 PHP
php使用pdo连接mssql server数据库实例
2014/12/25 PHP
10款实用的PHP开源工具
2015/10/23 PHP
Yii2实现UploadedFile上传文件示例
2017/02/15 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
在JS中最常看到切最容易迷惑的语法(转)
2010/10/29 Javascript
jquery入门—数据删除与隔行变色以及图片预览
2013/01/07 Javascript
js this函数调用无需再次抓获id,name或标签名
2014/03/03 Javascript
SyntaxHighlighter 3.0.83使用笔记
2015/01/26 Javascript
jQuery+json实现的简易Ajax调用实例
2015/12/14 Javascript
JavaScript设计模式开发中组合模式的使用教程
2016/05/18 Javascript
快速使用node.js进行web开发详解
2017/04/26 Javascript
JS实现简单拖拽效果
2017/06/21 Javascript
echarts学习笔记之图表自适应问题详解
2017/11/22 Javascript
Nodejs中怎么实现函数的串行执行
2019/03/02 NodeJs
vue-i18n结合Element-ui的配置方法
2019/05/20 Javascript
vue-router两种模式区别及使用注意事项详解
2019/08/01 Javascript
记一次react前端项目打包优化的方法
2020/03/30 Javascript
[38:41]2014 DOTA2国际邀请赛中国区预选赛 LGD VS CNB
2014/05/22 DOTA
python调用cmd复制文件代码分享
2013/12/27 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
2018/05/16 Python
python实现的MySQL增删改查操作实例小结
2018/12/19 Python
浅谈Pandas:Series和DataFrame间的算术元素
2018/12/22 Python
使用Python+wxpy 找出微信里把你删除的好友实例
2019/02/21 Python
详解python多线程之间的同步(一)
2019/04/03 Python
在python中实现调用可执行文件.exe的3种方法
2019/07/07 Python
Python 中pandas索引切片读取数据缺失数据处理问题
2019/10/09 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
2020/04/01 Python
Python Opencv实现单目标检测的示例代码
2020/09/08 Python
html5的pushstate以及监听浏览器返回事件的实现
2020/08/11 HTML / CSS
德国网上花店:Valentins
2018/08/15 全球购物
2014年信息技术工作总结
2014/12/16 职场文书
学校世界艾滋病日宣传活动总结
2015/05/05 职场文书
MySQL优化及索引解析
2022/03/17 MySQL