在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高效编程技巧
Jan 07 Python
使用python编写批量卸载手机中安装的android应用脚本
Jul 21 Python
python BeautifulSoup设置页面编码的方法
Apr 03 Python
Python正则表达式使用范例分享
Dec 04 Python
Windows下安装Scrapy
Oct 17 Python
PyQt5实现简易计算器
May 30 Python
Pandas操作CSV文件的读写实现方法
Nov 13 Python
Python获取、格式化当前时间日期的方法
Feb 10 Python
简单了解Python write writelines区别
Feb 27 Python
音频处理 windows10下python三方库librosa安装教程
Jun 20 Python
Python趣味爬虫之用Python实现智慧校园一键评教
May 28 Python
Python利用FlashText算法实现替换字符串
Mar 31 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之多条件混合筛选功能的实现方法
2019/10/09 PHP
个人总结的一些关于String、Function、Array的属性和用法
2007/01/10 Javascript
基于js disabled="false"不起作用的解决办法
2013/06/26 Javascript
jQuery实现购物车多物品数量的加减+总价计算
2014/06/06 Javascript
JavaScript中this的9种应用场景及三种复合应用场景
2015/09/12 Javascript
深入理解Javascript中的作用域链和闭包
2017/04/25 Javascript
详解angularjs popup-table 弹出框表格指令
2017/09/20 Javascript
Vue 菜单栏点击切换单个class(高亮)的方法
2018/08/22 Javascript
关于Vue源码vm.$watch()内部原理详解
2019/04/26 Javascript
Moment.js实现多个同时倒计时
2019/08/26 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
javascript写一个ajax自动拦截并下载数据代码实例
2019/09/07 Javascript
在vue和element-ui的table中实现分页复选功能
2019/12/04 Javascript
Javascript实现秒表计时游戏
2020/05/27 Javascript
原生js canvas实现鼠标跟随效果
2020/08/02 Javascript
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
Python中用于转换字母为小写的lower()方法使用简介
2015/05/19 Python
pandas string转dataframe的方法
2018/04/11 Python
python实现在IDLE中输入多行的方法
2018/04/19 Python
Python3 关于pycharm自动导入包快捷设置的方法
2019/01/16 Python
浅谈Pycharm中的Python Console与Terminal
2019/01/17 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
2020/04/23 Python
python suds访问webservice服务实现
2020/06/26 Python
利用CSS3实现折角效果实例源码
2016/09/28 HTML / CSS
html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法
2013/01/09 HTML / CSS
泰国健康和美容服务预订网站:GoWabi
2019/06/03 全球购物
Vivo俄罗斯官方在线商店:中国智能手机品牌
2019/10/04 全球购物
运行时异常与一般异常有何异同?
2014/01/05 面试题
自荐书封面下载
2013/11/29 职场文书
小学生美德少年事迹
2014/02/02 职场文书
成龙洗发水广告词
2014/03/14 职场文书
职业生涯规划书结束语
2014/04/15 职场文书
导师就业推荐信范文
2014/05/22 职场文书
复兴之路观后感3000字
2015/06/02 职场文书
《领导干部从政道德启示录》学习心得体会
2016/01/20 职场文书
集英社今正式宣布 成立游戏公司“集英社Games”
2022/03/31 其他游戏