在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从MP3文件获取id3的方法
Jun 15 Python
Python3用tkinter和PIL实现看图工具
Jun 21 Python
基于Python中求和函数sum的用法详解
Jun 28 Python
python tkinter界面居中显示的方法
Oct 11 Python
python3.4控制用户输入与输出的方法
Oct 17 Python
pygame实现五子棋游戏
Oct 29 Python
PyCharm 无法 import pandas 程序卡住的解决方式
Mar 09 Python
如何实现更换Jupyter Notebook内核Python版本
May 18 Python
Python实现列表中非负数保留,负数转化为指定的数值方式
Jun 04 Python
keras中的History对象用法
Jun 19 Python
django模型类中,null=True,blank=True用法说明
Jul 09 Python
python简单实现9宫格图片实例
Sep 03 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 Smarty生成EXCEL文档的代码
2008/08/23 PHP
PHP 地址栏信息的获取代码
2009/01/07 PHP
php增删改查示例自己写的demo
2013/09/04 PHP
php读取文件内容到数组的方法
2015/03/16 PHP
Yii获取当前url和域名的方法
2015/06/08 PHP
php读取der格式证书乱码解决方法
2015/06/22 PHP
PHP中Socket连接及读写数据超时问题分析
2016/07/19 PHP
PHP生成唯一ID之SnowFlake算法
2016/12/17 PHP
动态为事件添加js代码示例
2009/02/15 Javascript
javascript div 弹出可拖动窗口
2009/02/26 Javascript
JavaScript 比较时间大小的代码
2010/04/24 Javascript
Node.js模拟浏览器文件上传示例
2014/03/26 Javascript
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
javascript修改图片src的方法
2015/01/27 Javascript
jQuery常用知识点总结以及平时封装常用函数
2016/02/23 Javascript
扩展Bootstrap Tooltip插件使其可交互的方法
2016/11/07 Javascript
AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
2018/04/21 Javascript
解决vue单页面修改样式无法覆盖问题
2019/08/05 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
2020/03/07 Javascript
vue 使用post/get 下载导出文件操作
2020/08/07 Javascript
python中mechanize库的简单使用示例
2014/01/10 Python
python中精确输出JSON浮点数的方法
2014/04/18 Python
python轻松实现代码编码格式转换
2015/03/26 Python
Python中的匿名函数使用简介
2015/04/27 Python
Python实现二叉堆
2016/02/03 Python
Python正规则表达式学习指南
2016/08/02 Python
python3.4用循环往mysql5.7中写数据并输出的实现方法
2017/06/20 Python
Python随机生成均匀分布在单位圆内的点代码示例
2017/11/13 Python
使用pyqt 实现重复打开多个相同界面
2019/12/13 Python
python GUI库图形界面开发之PyQt5信号与槽事件处理机制详细介绍与实例解析
2020/03/08 Python
美国高端医师级美容产品电商:BeautifiedYou.com
2017/04/17 全球购物
美国领先的家庭智能音响系统品牌:Sonos
2018/07/20 全球购物
Linux的文件类型
2016/07/05 面试题
党建工作整改措施
2014/10/28 职场文书
六个好看实用的 HTML + CSS 后台登录入口页面
2022/04/28 HTML / CSS
nginx访问报403错误的几种情况详解
2022/07/23 Servers