多索引数据 Multi-Indexing

多索引数据 Multi-Indexing

作者: 莫烦 编辑: 莫烦 发布于: 2022-05-28

将数据记录在数据表时,特别是数据归类比较复杂的情况, 比如年级-班级-学生信息这种层级的记录,我们很可能要使用到合并单元格。 我们把这种模式叫做 Multi-Indexing 多索引。

multiindex

多索引在表格展示的时候,对数据规范化非常有利,所以如果你需要用表格来观察数据,是可以用这种形式来组织数据的。 但是如果你要做机器学习或频繁的数据加工时,我肯定不喜欢这样的数据组成方式,因为会让加工难度变高,成本变高。 所以你也可以想想,自己什么时候需要 Multi-Indexing.

本节内容涉及:

构建Row多索引

假如我们有这样一组学生的名字数据,想要对它进行多索引分配。

有些是 一年级 的,有些是 二年级 的。而且还分到的不同年级的不同班。 所以我们要给他们分配两个索引,年级班级,班级在年级下面。

有了这些索引,我们就能在刚刚构建 Series 的基础上,把 Multi-Index 给加上去了。

如果你想获取刚刚构建的 Series 索引,可以直接调用 s.index 来看看。

其实上面构建索引的方式还略微有点复杂,在年级班级的情况下,我们可以分级来构建索引,第一层级是年级,下面层级是每个学生所在的班级。

这样构建的 index2 和上面刚刚构建的 index 数值上是一模一样的。

欧,有时候你都不是用 Python 列表或者是元组来保存这些索引数据,你的索引数据也维护在一张 DataFrame 中。还别说,考虑一些业务逻辑的话, 还真有分开用不用表来维护的。

再来看看拼接起来是不是一样的?

构建DataFrame多索引

刚刚做的都是 Series 的 Multi-Index 构建,我们再来举一个 DataFrame 的例子。这个表记录了学生的学号和姓名。

构建Column多索引

如果能构建 Row 的多索引,当然可以对 Column 做多索引配置。 假设我还是用上一个例子,只是把他们的行列对调一下。

给它加上 Row 的 index,就相当于把原本的 Multi index 加到 columns 参数里。

选择数据

说了这么多构建多索引的方法,想必如果要你生成一张表保存下来,你已经没问题了。 但如果是要拿到一张多索引的表,要把里面的数据拿出来再加工呢?

这就需要我们会使用 pandas 的方法读多索引表了。 其实也不难,和正常读取选择数据非常像。

假设我们用的是下面这组数据

选取一年级的所有学生

再往下一级,选取一年级 1 班的所有学生

那如果是在 Row 上多索引呢?我们还是可以像以前选取数据那样, 使用 .loc[] 来所筛选。

下面就是用 .loc[] 来所筛选。

总结

到此,我们发现,数据表除了单 Column 和 单 Row 的索引方式,还可以在 Column 和 Row 上组建多层级的索引模式。 而且也不会影响我们日常从这种多索引的表格中获取数据。


降低知识传递的门槛

莫烦经常从互联网上学习知识,开源分享的人是我学习的榜样。 他们的行为也改变了我对教育的态度: 降低知识传递的门槛免费 奉献我的所学正是受这种态度的影响。 【支持莫烦】 能让我感到认同,我也更有理由坚持下去。