在pandas多重索引multiIndex中选定指定索引的行方法


Posted in Python onNovember 16, 2018

在multiIndex中选定指定索引的行

我们在用pandas类似groupby来使用多重index时,有时想要对多个level中的某个index对应的行进行操作,就需要在dataframe中找到该index对应的行,在单层index中我们可以方便的使用df.loc[index]来选择,在多重Index中我们可以利用的类似的思路,然而其中也有一些小坑,记录如下。

1 index为有序的

1.1 创建测试数据

首先创建一个dataframe数据

df = pd.DataFrame({'class':['A','A','A','B','B','B','C','C'],
   'id':['a','b','c','a','b','c','a','b'],
   'value':[1,2,3,4,5,6,7,8]})

df中内容如下图:

在pandas多重索引multiIndex中选定指定索引的行方法

1.2 设置multiIndex

通过set_index设为多重索引

df = df.set_index(['class','id'])

设置索引后效果:

在pandas多重索引multiIndex中选定指定索引的行方法

1.3 切片筛选index

这里同样使用loc定位

df.loc[('A',slice(None)),:]

各参数的解释如下:

loc[(a,b),c]中第一个参数元组为索引内容,a为level0索引对应的内容,b为level1索引对应的内容

因为df是一个dataframe,所以要用c来指定列

这里‘A',指选择class中的A类

slice(None), 是Python中的切片操作,这里用来选择任意的id,要注意!不能使用‘:'来指定任意index

‘:',用来指定dataframe任意的列

执行后的结果如下:

在pandas多重索引multiIndex中选定指定索引的行方法

同样,如果想只保留id中的'a',则可以使用:

df.loc[(slice(None),'a'),:]

2 index无序

前面的例子对应的index列为数字或字母,是有序的,接下来我们看看index列为中文的情况。

2.1 创建无序测试数据

df2 = pd.DataFrame({'课程':['语文','语文','数学','数学'],'得分':['最高','最低','最高','最低'],'分值':[90,50,100,60]})
df2 = df2.set_index(['课程','得分'])

在pandas多重索引multiIndex中选定指定索引的行方法

2.2 尝试切片选择index

df2.loc[('语文',slice(None)),:]

我们进行同样的操作,这时会发现提示出错:

UnsortedIndexError: 'MultiIndex Slicing requires the index to be fully lexsorted tuple len (2), lexsort depth (0)'

这是因为此时的index无法进行排序,在pandas文档中提到:Furthermore if you try to index something that is not fully lexsorted, this can raise:

我们可以通过 df2.index.is_lexsorted()来检查index是否有序,

In[1]: df2.index.is_lexsorted()
out[1]: False

接下来,我们尝试对Index进行排序。(排序时要在level里指定index名)

2.3 对index排序后切片选择index

df2 = df2.sort_index(level='课程')
df2.loc[('语文',slice(None)),:]

在pandas多重索引multiIndex中选定指定索引的行方法

得到了我们想要的结果。

参考文献:pandas-docs-MultiIndex / Advanced Indexing

以上这篇在pandas多重索引multiIndex中选定指定索引的行方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现bucket排序算法实例分析
May 04 Python
Python全局变量用法实例分析
Jul 19 Python
Python基于sftp及rsa密匙实现远程拷贝文件的方法
Sep 21 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
Jan 29 Python
python之PyQt按钮右键菜单功能的实现代码
Aug 17 Python
django写用户登录判定并跳转制定页面的实例
Aug 21 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
Sep 25 Python
ubuntu上安装python的实例方法
Sep 30 Python
利用OpenCV和Python实现查找图片差异
Dec 19 Python
Django模板标签{% for %}循环,获取制定条数据实例
May 14 Python
Python如何使用正则表达式爬取京东商品信息
Jun 01 Python
python实现调用摄像头并拍照发邮箱
Apr 27 Python
对Pandas MultiIndex(多重索引)详解
Nov 16 #Python
一百行python代码将图片转成字符画
Feb 19 #Python
Pandas GroupBy对象 索引与迭代方法
Nov 16 #Python
python实现指定字符串补全空格、前面填充0的方法
Nov 16 #Python
pandas 透视表中文字段排序方法
Nov 16 #Python
用Python实现数据的透视表的方法
Nov 16 #Python
pandas pivot_table() 按日期分多列数据的方法
Nov 16 #Python
You might like
php基础教程 php内置函数实例教程
2012/08/21 PHP
md5 16位二进制与32位字符串相互转换示例
2013/12/30 PHP
php获取网页请求状态程序示例
2014/06/17 PHP
php对象在内存中的存在形式分析
2015/02/03 PHP
PHP Filter过滤器全面解析
2016/08/09 PHP
php 读取文件夹下所有图片、文件的实例
2018/10/17 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
2019/04/02 PHP
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
2010/04/27 Javascript
IE下window.onresize 多次调用与死循环bug处理方法介绍
2013/11/12 Javascript
简介JavaScript中Boolean.toSource()方法的使用
2015/06/05 Javascript
Node.js项目中调用JavaScript的EJS模板库的方法
2016/03/11 Javascript
JavaScript获取当前url根目录(路径)
2016/06/17 Javascript
详解angular2采用自定义指令(Directive)方式加载jquery插件
2017/02/09 Javascript
解决nodejs中使用http请求返回值为html时乱码的问题
2017/02/18 NodeJs
Vue.js事件处理器与表单控件绑定详解
2017/03/20 Javascript
Layui table 组件的使用之初始化加载数据、数据刷新表格、传参数
2017/09/11 Javascript
详解Vue CLI3配置解析之css.extract
2018/09/14 Javascript
ng-repeat指令在迭代对象时的去重方法
2018/10/02 Javascript
JS实现数组去重及数组内对象去重功能示例
2019/02/02 Javascript
Python语言实现将图片转化为html页面
2017/12/06 Python
python3 logging日志封装实例
2020/04/08 Python
python使用selenium爬虫知乎的方法示例
2020/10/28 Python
Pycharm制作搞怪弹窗的实现代码
2021/02/19 Python
Python plt 利用subplot 实现在一张画布同时画多张图
2021/02/26 Python
使用css3背景渐变中的透明度来设置不同颜色的背景渐变
2014/03/31 HTML / CSS
澳大利亚墨尔本的在线时装店:LORETA
2018/09/14 全球购物
Etam艾格英国官网:法国著名女装品牌
2019/04/15 全球购物
Watchshop德国:欧洲在线手表No.1
2019/06/20 全球购物
韩国乐天网上商城:Lotte iMall
2021/02/03 全球购物
为什么需要版本控制?
2013/08/08 面试题
servlet面试题
2012/08/20 面试题
中学生打架检讨书
2014/02/10 职场文书
创业女性典型材料
2014/05/02 职场文书
MySQL学习总结-基础架构概述
2021/04/05 MySQL
Nginx配置之实现多台服务器负载均衡
2021/08/02 Servers