在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 字符串split的用法分享
Mar 23 Python
python3 破解 geetest(极验)的滑块验证码功能
Feb 24 Python
Django Admin实现三级联动的示例代码(省市区)
Jun 22 Python
Django unittest 设置跳过某些case的方法
Dec 26 Python
在Pandas中处理NaN值的方法
Jun 25 Python
Python异常原理及异常捕捉实现过程解析
Mar 25 Python
django自定义非主键自增字段类型详解(auto increment field)
Mar 30 Python
python调用API接口实现登陆短信验证
May 10 Python
python判断一个变量是否已经设置的方法
Aug 13 Python
selenium+python实现基本自动化测试的示例代码
Jan 27 Python
Python编程根据字典列表相同键的值进行合并
Oct 05 Python
Python采集爬取京东商品信息和评论并存入MySQL
Apr 12 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目录、文件操作
2010/11/01 PHP
xml在joomla表单中的应用详解分享
2012/07/19 PHP
php语言流程控制中的主动与被动
2012/11/05 PHP
解析php curl_setopt 函数的相关应用及介绍
2013/06/17 PHP
php实现搜索一维数组元素并删除二维数组对应元素的方法
2015/07/06 PHP
crontab无法执行php的解决方法
2016/01/25 PHP
php实现在线考试系统【附源码】
2018/09/18 PHP
推荐30个新鲜出炉的精美 jQuery 效果
2012/03/26 Javascript
jQuery实现购物车数字加减效果
2015/03/14 Javascript
JavaScript程序设计之JS调试
2015/12/09 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
2016/06/30 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
js实现上下左右弹框划出效果
2017/03/08 Javascript
Bootstrap table使用方法汇总
2017/11/17 Javascript
Vue脚手架的简单使用实例
2018/07/10 Javascript
JS实现匀速与减速缓慢运动的动画效果封装示例
2018/08/27 Javascript
移动端图片上传旋转、压缩问题的方法
2018/10/16 Javascript
vue-music 使用better-scroll遇到轮播图不能自动轮播问题
2018/12/03 Javascript
vue 点击展开显示更多(点击收起部分隐藏)
2019/04/09 Javascript
JavaScript之Blob对象类型的具体使用方法
2019/11/29 Javascript
Vue.js中使用Vuex实现组件数据共享案例
2020/07/31 Javascript
简单介绍Python中的readline()方法的使用
2015/05/24 Python
python list删除元素时要注意的坑点分享
2018/04/18 Python
TensorFlow实现简单卷积神经网络
2018/05/24 Python
Win10下Python3.7.3安装教程图解
2019/07/08 Python
解决pycharm 安装numpy失败的问题
2019/12/05 Python
python如何通过twisted搭建socket服务
2020/02/03 Python
Python如何用filter函数筛选数据
2020/03/05 Python
python检查目录文件权限并修改目录文件权限的操作
2020/03/11 Python
使用html5制作loading图的示例
2014/04/14 HTML / CSS
Smashbox英国官网:美国知名彩妆品牌
2017/11/13 全球购物
巴西香水和化妆品购物网站:The Beauty Box
2019/09/03 全球购物
2016护理专业求职自荐书
2016/01/28 职场文书
Java面试题冲刺第十八天--Spring框架3
2021/08/07 面试题
Nginx报错104:Connection reset by peer问题的解决及分析
2022/07/23 Servers
httpclient调用远程接口的方法
2022/08/14 Java/Android