今天我们来聊一下Pandas当中的数据集中带有多重索引的数据分析实战

通常我们接触比较多的是单层索引(左图),而多级索引也就意味着数据集当中的行索引有多个层级(右图),具体的如下图所示

AUTUMN

导入数据

我们先导入数据与pandas模块,源数据获取,公众号后台回复【多重索引】就能拿到

import pandas as pd## 导入数据集
df = pd.read_csv('dataset.csv')
df.head()

output

该数据集描述的是英国部分城市在2019年7月1日至7月4日期间的全天天气状况,我们先来看一下当前的数据集的行索引有哪些?代码如下

df.index.names

output

FrozenList(['City', 'Date'])

数据集当中CityDate,这里的City我们可以当作是第一层级索引,而Date则是第二层级索引

我们也可以通过调用sort_index()方法来按照数据集的行索引来进行排序,代码如下

df_1 = df.sort_index()
df_1

output

要是我们想将这个多层索引去除掉,就调用reset_index()方法,代码如下

df.reset_index()

下面我们就开始针对多层索引来对数据集进行一些分析的实战吧

第一层级的数据筛选

pandas当中数据筛选的方法,一般我们是调用loc以及iloc方法,同样地,在多层级索引的数据集当中数据的筛选也是调用该两种方法,例如筛选出伦敦白天的天气状况如何,代码如下

df_1.loc['London' , 'Day']

output

要是我们想针对所有的行,就可以这么来做

df_1.loc[:, 'Day']

output

同理针对所有的列,就可以这么来做

df_1.loc['London' , :]

output

多层级索引的数据筛选

要是我们想看伦敦2019年7月1日白天的天气状况,就可以这么来做

df.loc['London', 'Day'].loc['2019-07-01']

output

Weather               Shower
Wind               SW 16 mph
Max Temperature           28
Name: 2019-07-01, dtype: object

这里我们进行了两次数据筛选的操作,先是df.loc['London', 'Day'],然后再此的基础之上再进行loc['2019-07-01']操作,当然还有更加方便的步骤,代码如下

df.loc[('London', '2019-07-01'), 'Day']

output

Weather               Shower
Wind               SW 16 mph
Max Temperature           28
Name: 2019-07-01, dtype: object

除此之外我们要是想看一下伦敦2019年7月1日和7月2日两天白天的天气情况,就可以这么来做

df.loc[ ('London' , ['2019-07-01','2019-07-02'] ) ,'Day'
]

output

在此基础之上,我们想要看天气和风速这两列,我们也可以单独摘出来,代码如下

df.loc[ 'London' ,('Day', ['Weather', 'Wind'])
]

output

按照范围来筛选数据

对于第一层级的索引而言,我们同样还是调用loc方法来实现

df.loc['Cambridge':'Oxford','Day'
]

output

但是对于第二层级的索引,要是用同样的方式来用就会报错,

df.loc[('London', '2019-07-01': '2019-07-03'),'Day'
]

output

SyntaxError: invalid syntax (<ipython-input-22-176180497f92>, line 3)

正确的写法代码如下

df.loc[('London','2019-07-01'):('London','2019-07-03'),'Day'
]

output

筛选出所有全部的内容

对于单层索引而言,我们通过:来筛选出所有的内容,但是在多层级的索引上面则并不适用,

# 出现语法错误
df.loc[ ('London', :),'Day'
]
# 出现语法错误
df.loc[ (: , '2019-07-04'),'Day'
]

正确的做法如下所示

# 筛选出伦敦下面所有天数的白天天气情况
df.loc[ ('London', slice(None)),'Day'
]

output

# 筛选出2019年7月4日下所有城市的白天天气情况
df.loc[(slice(None) , '2019-07-04'), 'Day'
]

output

当然这里还有更加简便的方法,我们通过调用pandas当中IndexSlice函数来实现,代码如下

from pandas import IndexSlice as idx
df.loc[ idx[: , '2019-07-04'], 'Day'
]

output

又或者是

rows = idx[: , '2019-07-01']
cols = idx['Day' , ['Max Temperature','Weather']]
df.loc[rows, cols]

output

xs()方法的调用

对于多层级索引的数据集而言,调用xs()方法能够更加方便地进行数据的筛选,例如我们想要筛选出日期是2019年7月4日的所有数据,代码如下

df.xs('2019-07-04', level='Date')

output

我们需要在level参数上指定是哪个标签,例如我们想要筛选出伦敦2019年7月4日全天的天气情况,代码如下

df.xs(('London', '2019-07-04'), level=['City','Date'])

output

最后xs方法可以和上面提到的IndexSlice函数联用,针对多层级的数据集来进行数据的筛选,例如我们想要筛选出2019年7月2日至7月4日,伦敦全天的天气状况,代码如下

rows= (idx['2019-07-02':'2019-07-04'], 'London'
)
df.xs(rows , level = ['Date','City']
)

output

END

各位伙伴们好,詹帅本帅搭建了一个个人博客和小程序,汇集各种干货和资源,也方便大家阅读,感兴趣的小伙伴请移步小程序体验一下哦!(欢迎提建议)

推荐阅读

牛逼!Python常用数据类型的基本操作(长文系列第①篇)

牛逼!Python的判断、循环和各种表达式(长文系列第②篇)

牛逼!Python函数和文件操作(长文系列第③篇)

牛逼!Python错误、异常和模块(长文系列第④篇)

Pandas多层级索引的数据分析案例,超干货的!相关推荐

  1. Pandas 多层级索引的数据分析案例,超干货!

    作者 | 俊欣 来源 | 关于数据分析与可视化 今天我们来聊一下Pandas当中的数据集中带有多重索引的数据分析实战 通常我们接触比较多的是单层索引(左图),而多级索引也就意味着数据集当中的行索引有多 ...

  2. pandas 索引_10分钟带你学会Pandas多层级索引

    ​Pandas库的名字来源于其中3种主要数据结构开头字母的缩写: Panel,Dataframe,Series. 其中Series表示一维数据,Dataframe表示二维数据,Panel表示三维数据. ...

  3. 多维列表索引_10分钟带你学会Pandas多层级索引

    ​Pandas库的名字来源于其中3种主要数据结构开头字母的缩写: Panel,Dataframe,Series. 其中Series表示一维数据,Dataframe表示二维数据,Panel表示三维数据. ...

  4. Python 数据分析三剑客之 Pandas(四):函数应用、映射、排序和层级索引

    CSDN 课程推荐:<迈向数据科学家:带你玩转Python数据分析>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python ...

  5. Pandas数据分析案例(盛华化工锅炉排放数据可视化分析)

    Pandas数据分析案例(盛华化工锅炉排放数据可视化分析) 实验环境 数据集介绍 问题描述 实验步骤 一.数据导入与观察 二.数据转换 三.数据可视化分析 相关资源 实验环境 操作系统:Linux/W ...

  6. pandas分层索引(层级索引、MultiIndex)的创建、取值、切片、统计计算以及普通索引和层级索引的转换方法

    pandas分层索引(层级索引.MultiIndex)的创建.取值.切片.统计计算以及普通索引和层级索引的转换方法 @TOC 多层索引的Series 层级索引的创建 层级索引(multi index) ...

  7. pandas不显示index_pandas层级索引

    层级索引(hierarchical indexing) 下面创建一个Series, 在输入索引Index时,输入了由两个子list组成的list, 第一个子list是外层索引,第二个list是内层索引 ...

  8. pandas用groupby后对层级索引levels的处理

    层及索引levels,刚开始学习pandas的时候没有太多的操作关于groupby,仅仅是简单的count.sum.size等等,没有更深入的利用groupby后的数据进行处理.近来数据处理的时候有遇 ...

  9. 数据分析索引总结(上)Pandas单级索引

    Datawhale干货 作者:闫钟峰,Datawhale优秀学习者 寄语:本文对单级索引中的loc.iloc.[]三种方法进行了详细的阐述.同时,对布尔索引,快速标量索引方式.区间索引方式做了详细介绍 ...

最新文章

  1. mysql 区分大小写(大小写敏感)配置
  2. EFI Shell 命令参考
  3. java集合框架(Framework)的性能
  4. 应用后台省电秘籍——低功耗状态下应用如何正常运行?
  5. 文档生成组件工作估算
  6. linux通过tar包安装docker
  7. 雷凌linux车机ssh,OpenWRT自动挂载支持
  8. 个人pkm软件 pim软件_个人申请软件著作权需要走哪些流程
  9. 贪心——FatMouse' Trade(hdu1003)
  10. SinGAN实现的单图动画,ICCV 2019 Best Paper
  11. 自动化测试用例设计的原则
  12. dw1510_超低温种子储存柜
  13. Keil使用实战总结
  14. 【统计分析】(task1) 假设检验1:方法论与一元数值检验
  15. 抗滑桩初始弹性系数计算_理正岩土常见问题解答(全)
  16. 237Echarts - 3D 柱状图(Image to Bar3D)
  17. 计算机会计的专业知识竞赛,全国企业会计信息化知识竞赛测试题
  18. SpringBoot整合SpringSecurity+JWT实现系统认证、授权
  19. 没有工作经验,没有的究竟是什么?
  20. java高级过滤器、baseServlet、log4j配置使用poi实现excel导入数据库

热门文章

  1. mysql主从同步从库上Slave_IO_Running: Connecting问题
  2. ELK+kafka日志系统搭建-实战
  3. RabbitMQ安装方法 安装完成已验证方法步骤可行性
  4. Go的RESTful
  5. java修饰符总结,java访问修饰符总结
  6. 8086汇编4位bcd码_51单片机用汇编语言实现BCD码转换
  7. css背景上能添加文字,CSS3怎么为文字添加背景?
  8. 软件工程师生存指南:面试准备、工作经验和实用工具
  9. 利用python进行数据分析_资料 | 利用Python进行数据分析
  10. mysql long varchar2_long查询结果转换为varchar2类型