在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检测字符串中是否包含某字符集合中的字符
May 21 Python
python解析xml文件实例分析
May 27 Python
Python3中的列表,元组,字典,字符串相关知识小结
Nov 10 Python
JS设计模式之责任链模式实例详解
Feb 03 Python
Python中pillow知识点学习
Apr 30 Python
解决pycharm界面不能显示中文的问题
May 23 Python
使用Python AIML搭建聊天机器人的方法示例
Jul 09 Python
python实现遍历文件夹修改文件后缀
Aug 28 Python
Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)
Jul 16 Python
对tensorflow中的strides参数使用详解
Jan 04 Python
浅谈pymysql查询语句中带有in时传递参数的问题
Jun 05 Python
详解Python3 定义一个跨越多行的字符串的多种方法
Sep 06 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使用curl和正则表达式抓取网页数据示例
2014/04/13 PHP
php中print(),print_r(),echo()的区别详解
2014/12/01 PHP
PHP中抽象类、接口的区别与选择分析
2016/03/29 PHP
PHP实现基于mysqli的Model基类完整实例
2016/04/08 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
2017/03/23 PHP
php 调用ffmpeg获取视频信息的简单实现
2017/04/03 PHP
如何用js控制css中的float的代码
2007/08/16 Javascript
从零开始学习jQuery (四) jQuery中操作元素的属性与样式
2011/02/23 Javascript
jquery next nextAll nextUntil siblings的区别介绍
2013/10/05 Javascript
jQuery中nextUntil()方法用法实例
2015/01/07 Javascript
网页禁用右键菜单和鼠标拖动选择方法小结
2015/02/25 Javascript
jQuery.cookie.js实现记录最近浏览过的商品功能示例
2017/01/23 Javascript
js date 格式化
2017/02/15 Javascript
javaScript+turn.js实现图书翻页效果实例代码
2017/02/16 Javascript
Vue 组件(component)教程之实现精美的日历方法示例
2018/01/08 Javascript
jQuery实现input[type=file]多图预览上传删除等功能
2019/08/02 jQuery
JS实现秒杀倒计时特效
2020/01/02 Javascript
vue实现计算器功能
2020/02/22 Javascript
微信小程序基于ColorUI构建皮皮虾短视频去水印组件
2020/11/04 Javascript
Nuxt的动态路由和参数校验操作
2020/11/09 Javascript
五句话帮你轻松搞定js原型链
2020/12/09 Javascript
[01:57]2018DOTA2亚洲邀请赛赛前采访-iG
2018/04/03 DOTA
在Python中使用itertools模块中的组合函数的教程
2015/04/13 Python
python的几种矩阵相乘的公式详解
2019/07/10 Python
对Django url的几种使用方式详解
2019/08/06 Python
Python3.6 中的pyinstaller安装和使用教程
2020/03/16 Python
菲律宾最大的网上花店和礼品店:PhilFlower.com
2018/02/09 全球购物
VisionPros美国站:加拿大在线隐形眼镜和眼镜零售商
2020/02/11 全球购物
华三通信H3C面试题
2015/05/15 面试题
质量工程师岗位职责
2013/11/16 职场文书
医院标语大全
2014/06/23 职场文书
小学教师自我评价
2015/03/04 职场文书
2015领导干部廉洁自律工作总结
2015/07/23 职场文书
感恩的心主题班会
2015/08/12 职场文书
2016教师政治学习心得体会
2016/01/23 职场文书
Python中for后接else的语法使用
2021/05/18 Python