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验证企业工商注册码
Oct 25 Python
Python使用add_subplot与subplot画子图操作示例
Jun 01 Python
python中字符串的操作方法大全
Jun 03 Python
Python3列表内置方法大全及示例代码小结
May 10 Python
python实现简单五子棋游戏
Jun 18 Python
python原类、类的创建过程与方法详解
Jul 19 Python
python针对mysql数据库的连接、查询、更新、删除操作示例
Sep 11 Python
django 实现简单的插入视频
Apr 07 Python
python 追踪except信息方式
Apr 25 Python
python pymysql链接数据库查询结果转为Dataframe实例
Jun 05 Python
基于keras中的回调函数用法说明
Jun 17 Python
python 批量下载bilibili视频的gui程序
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学习之PHP表达式
2006/10/09 PHP
LotusPhp笔记之:Logger组件的使用方法
2013/05/06 PHP
解析php mysql 事务处理回滚操作(附实例)
2013/08/05 PHP
php禁止某ip或ip地址段访问的方法
2015/02/25 PHP
分享一则PHP定义函数代码
2015/02/26 PHP
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
我见过最全的个人js加解密功能页面
2007/12/12 Javascript
WordPress 照片lightbox效果的运用几点
2009/06/22 Javascript
javascript parseInt 大改造
2009/09/27 Javascript
jQuery实现表格颜色交替显示的方法
2015/03/09 Javascript
JQuery控制Radio选中方法分析
2015/05/29 Javascript
jQuery插件datalist实现很好看的input下拉列表
2015/07/14 Javascript
基于JS实现的笛卡尔乘积之商品发布
2016/05/13 Javascript
预防网页挂马的方法总结
2016/11/03 Javascript
Kindeditor单独调用单图上传增加预览功能的实例
2017/07/31 Javascript
js实现随机点名系统(实例讲解)
2017/10/18 Javascript
JS中appendChild追加子节点无效的解决方法
2018/10/14 Javascript
javascript中call()、apply()的区别
2019/03/21 Javascript
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
git使用.gitignore设置不生效或不起作用问题的解决方法
2017/06/01 Python
用Python调用win命令行提高工作效率的实例
2019/08/14 Python
伦敦一家西班牙童装精品店:La Coqueta
2018/02/02 全球购物
澳大利亚首屈一指的鞋类品牌:Tony Bianco
2018/03/13 全球购物
美国购买新书和二手书网站:Better World Books
2018/10/31 全球购物
俄罗斯花园种植材料批发和零售网上商店:Беккер
2019/07/22 全球购物
互联网创业计划书写作技巧攻略
2014/03/23 职场文书
幼儿园大班毕业教师寄语
2014/04/03 职场文书
劳资协议书范本
2014/04/23 职场文书
诉讼授权委托书范本
2014/10/05 职场文书
超市收银员岗位职责
2015/04/07 职场文书
2015小学教师德育工作总结
2015/05/12 职场文书
应收账款管理制度
2015/08/06 职场文书
销售人员管理制度
2015/08/06 职场文书
解决go在函数退出后子协程的退出问题
2021/04/30 Golang
MySQL数据库索引的最左匹配原则
2021/11/20 MySQL