在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检测手机QQ在线状态的脚本代码
Feb 10 Python
Windows上使用virtualenv搭建Python+Flask开发环境
Jun 07 Python
python简单实现操作Mysql数据库
Jan 29 Python
如何使用 Pylint 来规范 Python 代码风格(来自IBM)
Apr 06 Python
如何用python整理附件
May 13 Python
一条命令解决mac版本python IDLE不能输入中文问题
May 15 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
Jul 06 Python
Python 二叉树的层序建立与三种遍历实现详解
Jul 29 Python
python 实现线程之间的通信示例
Feb 14 Python
python 装饰器的实际作用有哪些
Sep 07 Python
python中绕过反爬虫的方法总结
Nov 25 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
Dec 21 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中常用编辑器推荐
2007/01/02 PHP
PHP 调试工具Debug Tools
2011/04/30 PHP
50个PHP程序性能优化的方法
2014/06/02 PHP
PHP中使用虚代理实现延迟加载技术
2014/11/05 PHP
让你的PHP7更快之Hugepage用法分析
2016/05/31 PHP
一个选择最快的服务器转向代码
2009/04/27 Javascript
Jquery替换已存在于element上的event的方法
2010/03/09 Javascript
js写一个字符串转成驼峰的实例
2013/06/21 Javascript
多种方式实现JS调用后台方法进行数据交互
2013/08/20 Javascript
取消选中单选框radio的三种方式示例介绍
2013/12/23 Javascript
简单选项卡 js和jquery制作方法分享
2014/02/26 Javascript
返回顶部按钮响应滚动且动态显示与隐藏
2014/10/14 Javascript
jQuery的text()方法用法分析
2014/12/20 Javascript
javascript与Python快速排序实例对比
2015/08/10 Javascript
js实现具有高亮显示效果的多级菜单代码
2015/09/01 Javascript
jQuery.extend 函数及用法详细
2015/09/06 Javascript
js生成随机数的过程解析
2015/11/24 Javascript
常用的Javascript设计模式小结
2015/12/09 Javascript
nodejs中sleep功能实现暂停几秒的方法
2017/07/12 NodeJs
axios 封装上传文件的请求方法
2018/09/26 Javascript
vue中input的v-model清空操作
2019/09/06 Javascript
JS Web Flex弹性盒子模型代码实例
2020/03/10 Javascript
[04:13]2014DOTA2国际邀请赛 专访DC目前形势不容乐观
2014/07/12 DOTA
Python实现计算最小编辑距离
2016/03/17 Python
Python3 执行系统命令并获取实时回显功能
2019/07/09 Python
python基础教程之while循环
2019/08/14 Python
详解pandas映射与数据转换
2021/01/22 Python
提供世界各地便宜的机票:Sky-tours
2016/07/21 全球购物
美国求婚钻戒网站:Super Jeweler
2016/08/27 全球购物
地球上最先进的胡子和头发修剪器:Bevel
2018/01/23 全球购物
美国购买肉、鸭、家禽、鹅肝和熟食网站:D’Artagnan
2018/11/13 全球购物
Farfetch巴西官网:奢侈品牌时尚购物平台
2020/10/19 全球购物
税务专业毕业生自荐信
2013/11/10 职场文书
求职简历推荐信范文
2013/12/02 职场文书
2014年应届大学生自我评价
2014/01/09 职场文书
我们的节日元宵节活动总结
2015/02/06 职场文书