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返回真假值(True or False)小技巧
Apr 10 Python
Python实现的HTTP并发测试完整示例
Apr 23 Python
使用url_helper简化Python中Django框架的url配置教程
May 30 Python
Python编程使用tkinter模块实现计算器软件完整代码示例
Nov 29 Python
python解析含有重复key的json方法
Jan 22 Python
Python如何使用OS模块调用cmd
Feb 27 Python
python和php学习哪个更有发展
Jun 17 Python
python连接mysql有哪些方法
Jun 24 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
Jul 15 Python
python中取绝对值简单方法总结
Jul 24 Python
使用jupyter notebook运行python和R的步骤
Aug 13 Python
pip/anaconda修改镜像源,加快python模块安装速度的操作
Mar 04 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
PHP4 与 MySQL 数据库操作函数详解
2006/10/09 PHP
php addslashes 函数详细分析说明
2009/06/23 PHP
php中常量DIRECTORY_SEPARATOR用法深入分析
2014/11/14 PHP
PHP图像识别技术原理与实现
2016/10/27 PHP
JavaScript极简入门教程(三):数组
2014/10/25 Javascript
Juery解决tablesorter中文排序和字符范围的方法
2015/05/06 Javascript
深入浅析JavaScript中的arguments对象(强力推荐)
2016/06/03 Javascript
javascript创建含数字字母的随机字符串方法总结
2016/08/01 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
2016/10/10 Javascript
JavaScript实现经典排序算法之插入排序
2016/12/28 Javascript
浅谈Vue.js
2017/03/02 Javascript
Vue.js教程之axios与网络传输的学习实践
2017/04/29 Javascript
微信小程序支付之c#后台实现方法
2017/10/19 Javascript
你可能不知道的前端算法之文字避让(inMap)
2018/01/12 Javascript
WebSocket的通信过程与实现方法详解
2018/04/29 Javascript
vue 监听键盘回车事件详解 @keyup.enter || @keyup.enter.native
2018/08/25 Javascript
请求时token过期自动刷新token操作
2020/09/11 Javascript
[02:24]DOTA2亚洲邀请赛 NAVI战队出场宣传片
2015/02/07 DOTA
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
2016/01/20 Python
Python 专题二 条件语句和循环语句的基础知识
2017/03/19 Python
python用post访问restful服务接口的方法
2018/12/07 Python
python3安装crypto出错及解决方法
2019/07/30 Python
Python字符串hashlib加密模块使用案例
2020/03/10 Python
Keras使用ImageNet上预训练的模型方式
2020/05/23 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
2021/01/24 Python
HTML5 使用 sessionStorage 进行页面传值的方法
2018/07/02 HTML / CSS
Steve Madden官网:美国鞋类品牌
2017/01/29 全球购物
盛大笔试题
2016/11/05 面试题
shell变量的作用空间是什么
2013/08/17 面试题
函授毕业生的自我鉴定
2013/11/26 职场文书
2014年小学元旦活动方案
2014/02/12 职场文书
班级年度安全计划书
2014/05/01 职场文书
中秋节活动总结
2014/08/29 职场文书
六一儿童节开幕词
2015/01/29 职场文书
安全教育主题班会总结
2015/08/14 职场文书
vue.js Router中嵌套路由的实用示例
2021/06/27 Vue.js