系列文章目录
第一章 Pandas 学习入门之pandas数据读取
第二章 Pandas 学习入门之pandas数据结构
第三章 Pandas 学习入门之pandas数据查询
第四章 Pandas 学习入门之pandas新增数据列
第五章 Pandas 学习入门之pandas数据统计函数
第六章 Pandas 学习入门之pandas处理缺失值
第七章 Pandas 学习入门之pandas数据排序
第八章 Pandas 学习入门之pandas字符串操作
第九章 Pandas 学习入门之pandas重要参数axis
第十章 Pandas 学习入门之pandas索引index用途
第十一章 Pandas 学习入门之pandas实现DataFrame的Merge
第十二章 Pandas 学习入门之pandas实现数据合并Concat
第十三章 Pandas 学习入门之pandas批量拆分Excel与合并Excel
第十四章 Pandas 学习入门之pandas分组聚合统计groupby
第十五章 Pandas 学习入门之pandas分层索引MultiIndex
随着人工智能的不断发展,数据分析这门技术也越来越重要,很多人都开启了学习数据分析,本文就介绍了pandas学习的基础内容。本章简单介绍了pandas分层索引MultiIndex
。
前言
本章简单介绍了pandas分层索引MultiIndex
。
提示:以下是本篇文章正文内容,下面案例可供参考
一、pandas中的分层索引MultiIndex是什么?
- 分层索引:在一个轴向上拥有多个索引层级,可以表达更高维度数据的形式;
- 可以更方便的进行数据筛选,如果有序则性能更好;
- groupby等操作的结果,如果是多KEY,结果是分层索引,需要会使用
- 一般不需要自己创建分层索引(MultiIndex有构造函数但一般不用)
二、引入库 & 数据准备
1.引入库
代码如下(示例):
import pandas as pd
%matplotlib inline
2.数据准备
数据来源:百度、阿里巴巴、爱奇艺、京东四家公司的10天股票数据(https://cn.investing.com/)
stocks = pd.read_excel('./互联网公司股票.xlsx')
stocks.shape
(12, 8)
stocks.head()
stocks["公司"].unique()
array(['BIDU', 'BABA', 'IQ', 'JD'], dtype=object)
你的代码片段 stocks["公司"].unique()
旨在获取名为 stocks
的DataFrame中 "公司"
列的所有唯一值。这个操作非常实用,可以帮助你了解这一列中有哪些不同的公司名称,而且它会自动排除任何重复项。
stocks.index
RangeIndex(start=0, stop=12, step=1)
stocks.groupby('公司')["收盘"].mean()
公司 BABA 166.80 BIDU 102.98 IQ 15.90 JD 28.35 Name: 收盘, dtype: float64
三、Series的分层索引MultiIndex
ser = stocks.groupby(['公司', '日期'])['收盘'].mean()
ser
公司 日期 BABA 2019-10-01 165.15 2019-10-02 165.77 2019-10-03 169.48 BIDU 2019-10-01 102.00 2019-10-02 102.62 2019-10-03 104.32 IQ 2019-10-01 15.92 2019-10-02 15.72 2019-10-03 16.06 JD 2019-10-01 28.19 2019-10-02 28.06 2019-10-03 28.80 Name: 收盘, dtype: float64
多维索引中,空白的意思是:使用上面的值。
ser.index
MultiIndex([('BABA', '2019-10-01'), ('BABA', '2019-10-02'), ('BABA', '2019-10-03'), ('BIDU', '2019-10-01'), ('BIDU', '2019-10-02'), ('BIDU', '2019-10-03'), ( 'IQ', '2019-10-01'), ( 'IQ', '2019-10-02'), ( 'IQ', '2019-10-03'), ( 'JD', '2019-10-01'), ( 'JD', '2019-10-02'), ( 'JD', '2019-10-03')], names=['公司', '日期'])
# unstack把二级索引变成列
ser.unstack()
ser
公司 日期 BABA 2019-10-01 165.15 2019-10-02 165.77 2019-10-03 169.48 BIDU 2019-10-01 102.00 2019-10-02 102.62 2019-10-03 104.32 IQ 2019-10-01 15.92 2019-10-02 15.72 2019-10-03 16.06 JD 2019-10-01 28.19 2019-10-02 28.06 2019-10-03 28.80 Name: 收盘, dtype: float64
ser.reset_index()
四、Series有多层索引MultiIndex怎样筛选数据?
ser
公司 日期 BABA 2019-10-01 165.15 2019-10-02 165.77 2019-10-03 169.48 BIDU 2019-10-01 102.00 2019-10-02 102.62 2019-10-03 104.32 IQ 2019-10-01 15.92 2019-10-02 15.72 2019-10-03 16.06 JD 2019-10-01 28.19 2019-10-02 28.06 2019-10-03 28.80 Name: 收盘, dtype: float64
ser.loc['BIDU']
日期 2019-10-01 102.00 2019-10-02 102.62 2019-10-03 104.32 Name: 收盘, dtype: float64
# 多层索引,可以用元组的形式筛选
ser.loc[('BIDU', '2019-10-02')]
102.62
ser.loc[:, '2019-10-02']
公司 BABA 165.77 BIDU 102.62 IQ 15.72 JD 28.06 Name: 收盘, dtype: float64
五、DataFrame的多层索引MultiIndex
stocks.head()
stocks.set_index(['公司', '日期'], inplace=True)
stocks
参数inplace=True
意味着这个操作将直接在原始DataFrame stocks
上进行,而不是创建一个新的DataFrame。
stocks.index
MultiIndex([('BIDU', '2019-10-03'), ('BIDU', '2019-10-02'), ('BIDU', '2019-10-01'), ('BABA', '2019-10-03'), ('BABA', '2019-10-02'), ('BABA', '2019-10-01'), ( 'IQ', '2019-10-03'), ( 'IQ', '2019-10-02'), ( 'IQ', '2019-10-01'), ( 'JD', '2019-10-03'), ( 'JD', '2019-10-02'), ( 'JD', '2019-10-01')], names=['公司', '日期'])
stocks.sort_index(inplace=True)
stocks
DataFrame stocks
的多级索引(由 '公司'
和 '日期'
组成)将会按照字典顺序进行排序。
你可以看到数据首先按 '公司'
排序,对于同一公司的数据,则进一步按 '日期'
排序。
六、DataFrame有多层索引MultiIndex怎样筛选数据?
【重要知识】在选择数据时:
- 元组(key1,key2)代表筛选多层索引,其中key1是索引第一级,key2是第二级,比如key1=JD, key2=2019-10-02
- 列表[key1,key2]代表同一层的多个KEY,其中key1和key2是并列的同级索引,比如key1=JD, key2=BIDU
stocks.loc['BIDU']
stocks.loc[('BIDU', '2019-10-02'), :]
收盘 102.62 开盘 100.85 高 103.24 低 99.50 交易量 2.69 涨跌幅 0.01 Name: (BIDU, 2019-10-02), dtype: float64
stocks.loc[['BIDU', 'JD'], :]
stocks.loc[(['BIDU', 'JD'], '2019-10-03'), :]
stocks.loc[('BIDU', ['2019-10-02', '2019-10-03']), '收盘']
公司 日期 BIDU 2019-10-02 102.62 2019-10-03 104.32 Name: 收盘, dtype: float64
# slice(None)代表筛选这一索引的所有内容
stocks.loc[(slice(None), ['2019-10-02', '2019-10-03']), :]
stocks.reset_index()
总结
提示:这里对文章进行总结:
随着人工智能的不断发展,数据分析这门技术也越来越重要,很多人都开启了学习数据分析,本文就介绍了pandas学习的基础内容。本章简单介绍了pandas分层索引MultiIndex
。