在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求导数的方法
May 09 Python
Python3中的列表生成式、生成器与迭代器实例详解
Jun 11 Python
python爬取哈尔滨天气信息
Jul 14 Python
对Python3+gdal 读取tiff格式数据的实例讲解
Dec 04 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
Apr 12 Python
python实现websocket的客户端压力测试
Jun 25 Python
Python画图实现同一结点多个柱状图的示例
Jul 07 Python
python实现ssh及sftp功能(实例代码)
Mar 16 Python
keras 多gpu并行运行案例
Jun 10 Python
Python字符串格式化常用手段及注意事项
Jun 17 Python
python图片合成的示例
Nov 09 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
Feb 16 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实现约瑟夫问题的方法小结
2015/03/23 PHP
php计算整个目录大小的方法
2015/06/01 PHP
php判断用户是否手机访问代码
2015/06/08 PHP
PHP实现普通hash分布式算法简单示例
2018/08/06 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
2019/06/25 PHP
jQuery 全选效果实现代码
2009/03/23 Javascript
js中字符替换函数String.replace()使用技巧
2011/08/14 Javascript
JQuery+CSS提示框实现思路及代码(纯手工打造)
2013/05/07 Javascript
javascript框架设计之框架分类及主要功能
2015/06/23 Javascript
实用又漂亮的BootstrapValidator表单验证插件
2016/05/30 Javascript
vue生成随机验证码的示例代码
2017/09/29 Javascript
layui的面包屑或者表单不显示的解决方法
2019/09/05 Javascript
layer.js之回调销毁对话框的例子
2019/09/11 Javascript
JavaScript RegExp 对象用法详解
2019/09/24 Javascript
[06:07]刀塔密之二:攻之吾命受之吾幸
2014/07/03 DOTA
[02:12]探秘2016国际邀请赛中国区预选赛选手房间
2016/06/25 DOTA
使用python绘制人人网好友关系图示例
2014/04/01 Python
Python制作刷网页流量工具
2017/04/23 Python
python执行精确的小数计算方法
2019/01/21 Python
总结python中pass的作用
2019/02/27 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
2019/12/10 Python
Anaconda配置pytorch-gpu虚拟环境的图文教程
2020/04/16 Python
python中取绝对值简单方法总结
2020/07/24 Python
CSS3线性渐变简单实现以及该属性在浏览器中的不同
2012/12/12 HTML / CSS
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
linux下进程间通信的方式
2013/01/23 面试题
年终自我鉴定
2013/10/09 职场文书
会议接待欢迎词
2014/01/12 职场文书
银行员工职业规划范文
2014/01/21 职场文书
新闻传媒系求职信范文
2014/04/19 职场文书
校庆标语集锦
2014/06/25 职场文书
财务部岗位职责
2015/02/03 职场文书
个人年终总结结尾
2015/03/06 职场文书
2019七夕节祝福语36句,快来收藏吧
2019/08/06 职场文书
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript
python中redis包操作数据库的教程
2022/04/19 Python