1 创建多层索引
1)隐式构造
最常见的方法是给DataFrame构造函数的index参数传递两个或更多的数组
· Series也可以创建多层索引
![](https://i-blog.csdnimg.cn/blog_migrate/e0712fd182a84476f810046e12cd3037.png)
一般情况下,两层索引就够用了
2)显式构造 pd.MultiIndex
· 使用数组
![](https://i-blog.csdnimg.cn/blog_migrate/38517540eae44376bbfa51603be171dc.png)
· 使用tuple
![](https://i-blog.csdnimg.cn/blog_migrate/fd60b39937041fd464bc16f91b473c26.png)
· 使用product 最简单,推荐使用
![](https://i-blog.csdnimg.cn/blog_migrate/1801aac777596e759158bc7e15a56d0d.png)
2 对DataFrame列同样可以设置多层索引
![](https://i-blog.csdnimg.cn/blog_migrate/1dee8693cc3c9644198c5d67bee5c90a.png)
============================
练习8:
1 创建一个DataFrame,表示张三、李四期中、期末各科成绩。
============================
3 多层索引对象的索引与切片操作
1)Series的操作
【重要】对于Series来说,直接中括号[]与使用.loc()完全一样,因此,推荐使用中括号索引和切片。
(1)索引
![](https://i-blog.csdnimg.cn/blog_migrate/c1d26ec4e218f5b9d8a8f79ebaa147f0.png)
#第一个参数相当于多层索引的第一维,第二个参数就是第二维了
![](https://i-blog.csdnimg.cn/blog_migrate/a300c2b56fb03131047f7e32ec160815.png)
#把两个参数写在一起,会将整体作为一个参数,就把整体中的所有的参数都作为一维参数,能查到的就返回,查不到的就不返回,一维中没有期中,所以只返回了张三的查询结果,看看那下面这张截图就知道怎么回事了。
![](https://i-blog.csdnimg.cn/blog_migrate/1489b065559313584c33dccc52e2670b.png)
(2)切片
![](https://i-blog.csdnimg.cn/blog_migrate/4b97b991b4344d74af8049e7943df6f5.png)
2)DataFrame的操作
(1)可以直接使用列名来进行索引
![](https://i-blog.csdnimg.cn/blog_migrate/d45a7d2fb5d1033bfd1117409542a589.png)
(2)使用行索引需要用ix(),loc()等函数
![](https://i-blog.csdnimg.cn/blog_migrate/c4b3ce351598ead2d96c5366e24e549c.png)
【及其重要】推荐使用loc()函数
注意在对行索引的时候,若一级行索引还有多个,对二级行索引会遇到问题!也就是说,无法直接对二级索引进行索引,必须让二级索引变成一级索引后才能对其进行索引!
![](https://i-blog.csdnimg.cn/blog_migrate/bcf5765da331973917f9b94909b47edf.png)
同时对一二级索引进行检索
![](https://i-blog.csdnimg.cn/blog_migrate/94d778d0a2d2c28d77aa35d0b58b4621.png)
===============================
练习:
1 分析比较Series和DataFrame各种索引的方式,熟练掌握.loc()方法
2 假设张三再一次在其中考试的时候因为特殊原因放弃Python考试,如何实现
===============================
4 索引的堆(先入后出)(stack)
· stack()
· unstack()
【小技巧】使用stack()的时候,level等于哪一个,哪一个就消失,出现在行里。
![](https://i-blog.csdnimg.cn/blog_migrate/03b428f306c4ee4249fbaf3d16f09176.png)
【小技巧】使用unstack()的时候,level等于哪一个,哪一个就消失,出现在列里。
![](https://i-blog.csdnimg.cn/blog_migrate/6609d9894dfcd3a9043bed042ddc86ba.png)
==========================================
练习:
1,使用unstack()将ddd变成两行,分别为期中期末
2,使用unstack()将ddd变成四行,分别为四个科目
==========================================
5 聚合操作
【注意】
· 需要指定axis
· 【小技巧】和unstack()相反,聚合的时候,axis等于哪一个,哪一个就保留。
所谓的聚合操作:平均数,方差,最大值,最小值 ......
![](https://i-blog.csdnimg.cn/blog_migrate/b22b5422a5e34f987cddf1f1269ed357.png)
=======================================
练习:
1 计算各个科目中期末平均成绩
![](https://i-blog.csdnimg.cn/blog_migrate/6387a1a378875eface8b153efba13557.png)
2 计算各个科目张三李四的最高分
![](https://i-blog.csdnimg.cn/blog_migrate/e74baf49fa8eee9e603677aa1b7c1992.png)