为什么要使用分层索引MultiIndex

  • 分层索引:在一个轴向上拥有多个索引层级,可以表达更高维度数据的形式。
  • 可以更方便的进行数据筛选,如果索引有序则性能更好。
  • groupby等操作的结果,如果是根据多个key分组,结果是分层索引。

实例

数据准备

数据来源于 英为财情:https://cn.investing.com/

例如,搜索京东的股票:
在这里插入图片描述

点击进入:
在这里插入图片描述

找到下面的 历史数据,然后点击:
在这里插入图片描述

在这里插入图片描述

就可以将数据拷贝到excel中。
找了4个公司的股票,每个公司3天,增加 公司 这列,汇总到一起,最后excel文件中的内容如下:
在这里插入图片描述

读取excel中的数据,转换为DataFrame:

import pandas as pd

stock_df = pd.read_excel('./data/几家公司几天的股票.xlsx')

查看DataFrame:
在这里插入图片描述

查看数据的形状:
在这里插入图片描述

查看包含哪些公司:
在这里插入图片描述

查看数据的索引:
在这里插入图片描述

对公司进行分组,然后看收盘的平均值:
在这里插入图片描述

Series的分层索引MultiIndex

按照公司、日期进行分组聚合:

ser = stock_df.groupby(['公司', '日期'])['收盘'].mean()

查看返回值的类型,是一个Series:
在这里插入图片描述

查看Series的内容:
在这里插入图片描述

上面结果中,公司和日期构成了多维索引。在多维索引中,空白的意思表示使用上面的值。例如BABA下面两行公司的地方是空白,表示使用BABA。

查看下Series的索引:
在这里插入图片描述

unstack把第二级索引变成列:
在这里插入图片描述

重新查看下ser:
在这里插入图片描述

把索引变成列:
在这里插入图片描述

当Series有多层索引MultiIndex时,如何筛选数据

先看看Series:
在这里插入图片描述

筛选某个公司的数据:
在这里插入图片描述

用多层索引筛选数据,可以用元组的形式筛选:
在这里插入图片描述

如果只筛选第二级索引,可以把第一级索引写成冒号(: 表示全部):
在这里插入图片描述

DataFrame的多层索引MultiIndex

先看下原始的DataFrame:
在这里插入图片描述

设置分层索引:

stock_df.set_index(['公司', '日期'], inplace=True)

查看结果:
在这里插入图片描述

查看下索引:
在这里插入图片描述

将索引排序:

# 将索引排序
stock_df.sort_index(inplace=True)

查看下结果:
在这里插入图片描述

当DataFrame有多层索引MultiIndex时,如何筛选数据

注意,在选择数据时

  • 元组 (key1, key2) 代表筛选多层索引,其中key1是索引的第一级,key2是索引的第二级,例如key1传入公司名称,key2传入日期。
  • 列表 [key1, key2] 代表筛选同一个层级的多个key,其中key1和key2是并列的同级索引,例如key1传入公司1的名称,key2传入公司2的名称。

先看下DataFrame:
在这里插入图片描述

筛选第一层索引:
在这里插入图片描述

根据多级索引查询:
在这里插入图片描述

根据多级索引查询,只查询一列:
在这里插入图片描述

根据第一级索引的多个值筛选:
在这里插入图片描述

第一级索引传入多个值,第二级索引传入1个值,筛选所有列:
在这里插入图片描述

第一级索引传入多个值,第二级索引传入1个值,筛选1列:
在这里插入图片描述

第一级索引传入1个值,第二级索引传入多个值,筛选1列:
在这里插入图片描述

slice(None)代表这一索引的所有内容:
在这里插入图片描述

reset_index()把多级索引变为列:
在这里插入图片描述

更多推荐