Pandas系列学习教程——15 pandas分层索引MultiIndex

本文介绍了Pandas库在数据分析中的基础应用,重点讲解了分层索引MultiIndex的概念、使用方法以及在数据筛选、排序和处理过程中的重要作用,适合初学者系统学习Pandas。
摘要由CSDN通过智能技术生成

系列文章目录

第一章 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

  • 19
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值