为什么要学习分层索引MultiIndex?
- 分层索引:在一个轴向上拥有多个索引层级,可以表达更高维度数据的形式;
- 可以更方便的进行数据筛选,如果有序则性能更好;
- groupby等操作的结果,如果是多KEY,结果是分层索引,需要会使用
- 一般不需要自己创建分层索引(MultiIndex有构造函数但一般不用)
演示数据:百度、阿里巴巴、爱奇艺、京东四家公司的10天股票数据
数据来自:英为财经
https://cn.investing.com/
本次目标:
一、Series的分层索引MultiIndex
1、数据准备
import pandas as pd
stocks = pd.read_excel('/Users/hathaway/PycharmProjects/untitled/MzTest/互联网公司股票.xlsx',engine = "openpyxl")
print(stocks.head(3))
print(stocks["公司"].unique())
2、分层索引
ser = stocks.groupby(["公司","日期"])["收盘"].mean()
print(ser)
print(ser.index) #分层索引
3、把二级索引变成列
# unstack把二级索引变成列
a = ser.unstack()
print(a)
4、把ser变成dafaframe
b = ser.reset_index()
print(b)
二、Series有多层索引怎样筛选数据?
a = ser.loc["BIDU"]
print(a)
1、多层索引,可以用元祖的形式筛选
b = ser.loc[("BIDU","2019-10-02")]
print(b)
2、筛选二级索引
c = ser.loc[:,"2019-10-02"]
print(c)
三、DataFrame的多层索引MultiIndex
stocks.set_index(["公司","日期"],inplace = True)
print(stocks)
排序,提高查询效率
stocks.sort_index(inplace = True)
print(stocks)
四、DataFrame有多层索引怎样筛选数据?
【重要知识】在选择数据时:
- 元组(key1,key2)代表筛选多层索引,其中key1是索引第一级,key2是第二级,比如key1=JD, key2=2019-10-02
- 列表[key1,key2]代表同一层的多个KEY,其中key1和key2是并列的同级索引,比如key1=JD, key2=BIDU
1、筛选一级索引为“BIDU”的值
stocks.set_index(["公司","日期"],inplace = True)
a = stocks.loc["BIDU"]
print(a)
2、筛选一级索引为"BIDU",二级索引为"2019-10-02"的值
a = stocks.loc[("BIDU","2019-10-02")]
print(a)
3、筛选一级索引为"BIDU","JD"的值
b = stocks.loc[["BIDU","JD"]]
print(b)
4、查询一级索引为"BIDU","JD",二级索引为2019-10-02的值
c = stocks.loc[(["BIDU","JD"],"2019-10-02"),:]
print(c)
5、筛选一级索引的所有内容,但是过滤条件通过二级索引过滤
# slice(None)代表筛选这一索引的所有内容
d = stocks.loc[(slice(None), ['2019-10-02', '2019-10-03']), :]
print(d)
6、多级索引变成普通的列,普通的dataframe
e = stocks.reset_index()
print(e)