在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数据结构之二叉树的遍历实例
Apr 29 Python
Python实现快速排序和插入排序算法及自定义排序的示例
Feb 16 Python
python编码总结(编码类型、格式、转码)
Jul 01 Python
python 在屏幕上逐字显示一行字的实例
Dec 24 Python
pytorch中tensor张量数据类型的转化方式
Dec 31 Python
tensorflow estimator 使用hook实现finetune方式
Jan 21 Python
keras 特征图可视化实例(中间层)
Jan 24 Python
利用pandas向一个csv文件追加写入数据的实现示例
Apr 23 Python
python新手学习可变和不可变对象
Jun 11 Python
关于django python manage.py startapp 应用名出错异常原因解析
Dec 15 Python
一篇文章搞懂python混乱的切换操作与优雅的推导式
Aug 23 Python
Python绘制散乱的点构成的图的方法
Apr 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
phpcms中的评论样式修改方法
2016/10/21 PHP
YII2框架中actions的作用与使用方法示例
2020/03/13 PHP
用javascript实现的仿Flash广告图片轮换效果
2007/04/24 Javascript
js中prototype用法详细介绍
2013/11/14 Javascript
wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析
2015/05/06 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
将页面table内容与样式另存成excel文件的方法
2015/08/05 Javascript
jquery动感漂浮导航菜单代码分享
2020/04/15 Javascript
jQuery实现带有洗牌效果的动画分页实例
2015/08/31 Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
2016/01/08 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
基于zepto的移动端轻量级日期插件--date_picker
2016/03/04 Javascript
Web程序员必备的7个JavaScript函数
2016/06/14 Javascript
node.js中module.exports与exports用法上的区别
2016/09/02 Javascript
JS基于递归实现倒计时效果的方法
2016/11/26 Javascript
微信小程序基于本地缓存实现点赞功能的方法
2017/12/18 Javascript
Vue从TodoList中学父子组件通信
2019/02/05 Javascript
ES6 class的应用实例分析
2019/06/27 Javascript
微信小程序和H5页面间相互跳转代码实例
2019/09/19 Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
2020/03/24 Javascript
有趣的JavaScript隐式类型转换操作实例分析
2020/05/02 Javascript
Python使用numpy模块实现矩阵和列表的连接操作方法
2019/06/26 Python
Python通过yagmail实现发送邮件代码解析
2020/10/27 Python
CSS3媒体查询Media Queries基础学习教程
2016/02/29 HTML / CSS
html5 input元素新特性_动力节点Java学院整理
2017/07/06 HTML / CSS
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
九年级家长会邀请函
2014/01/15 职场文书
大学生自我鉴定范文模板
2014/01/21 职场文书
志愿者服务感言
2014/02/27 职场文书
外语专业毕业生自荐信
2014/04/14 职场文书
精神文明建设先进工作者事迹材料
2014/05/02 职场文书
运动会口号大全
2014/06/07 职场文书
2014年中学生检讨书大全
2014/10/09 职场文书
成品仓管员岗位职责
2015/04/01 职场文书
民事答辩状范本
2015/05/21 职场文书
vue/cli 配置动态代理无需重启服务的方法
2022/05/20 Vue.js