Pandas多层级索引的数据分析案例,超干货的!
今天我们来聊一下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'])
数据集当中City
、Date
,这里的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多层级索引的数据分析案例,超干货的!相关推荐
- Pandas 多层级索引的数据分析案例,超干货!
作者 | 俊欣 来源 | 关于数据分析与可视化 今天我们来聊一下Pandas当中的数据集中带有多重索引的数据分析实战 通常我们接触比较多的是单层索引(左图),而多级索引也就意味着数据集当中的行索引有多 ...
- pandas 索引_10分钟带你学会Pandas多层级索引
Pandas库的名字来源于其中3种主要数据结构开头字母的缩写: Panel,Dataframe,Series. 其中Series表示一维数据,Dataframe表示二维数据,Panel表示三维数据. ...
- 多维列表索引_10分钟带你学会Pandas多层级索引
Pandas库的名字来源于其中3种主要数据结构开头字母的缩写: Panel,Dataframe,Series. 其中Series表示一维数据,Dataframe表示二维数据,Panel表示三维数据. ...
- Python 数据分析三剑客之 Pandas(四):函数应用、映射、排序和层级索引
CSDN 课程推荐:<迈向数据科学家:带你玩转Python数据分析>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python ...
- Pandas数据分析案例(盛华化工锅炉排放数据可视化分析)
Pandas数据分析案例(盛华化工锅炉排放数据可视化分析) 实验环境 数据集介绍 问题描述 实验步骤 一.数据导入与观察 二.数据转换 三.数据可视化分析 相关资源 实验环境 操作系统:Linux/W ...
- pandas分层索引(层级索引、MultiIndex)的创建、取值、切片、统计计算以及普通索引和层级索引的转换方法
pandas分层索引(层级索引.MultiIndex)的创建.取值.切片.统计计算以及普通索引和层级索引的转换方法 @TOC 多层索引的Series 层级索引的创建 层级索引(multi index) ...
- pandas不显示index_pandas层级索引
层级索引(hierarchical indexing) 下面创建一个Series, 在输入索引Index时,输入了由两个子list组成的list, 第一个子list是外层索引,第二个list是内层索引 ...
- pandas用groupby后对层级索引levels的处理
层及索引levels,刚开始学习pandas的时候没有太多的操作关于groupby,仅仅是简单的count.sum.size等等,没有更深入的利用groupby后的数据进行处理.近来数据处理的时候有遇 ...
- 数据分析索引总结(上)Pandas单级索引
Datawhale干货 作者:闫钟峰,Datawhale优秀学习者 寄语:本文对单级索引中的loc.iloc.[]三种方法进行了详细的阐述.同时,对布尔索引,快速标量索引方式.区间索引方式做了详细介绍 ...
最新文章
- mysql 区分大小写(大小写敏感)配置
- EFI Shell 命令参考
- java集合框架(Framework)的性能
- 应用后台省电秘籍——低功耗状态下应用如何正常运行?
- 文档生成组件工作估算
- linux通过tar包安装docker
- 雷凌linux车机ssh,OpenWRT自动挂载支持
- 个人pkm软件 pim软件_个人申请软件著作权需要走哪些流程
- 贪心——FatMouse' Trade(hdu1003)
- SinGAN实现的单图动画,ICCV 2019 Best Paper
- 自动化测试用例设计的原则
- dw1510_超低温种子储存柜
- Keil使用实战总结
- 【统计分析】(task1) 假设检验1:方法论与一元数值检验
- 抗滑桩初始弹性系数计算_理正岩土常见问题解答(全)
- 237Echarts - 3D 柱状图(Image to Bar3D)
- 计算机会计的专业知识竞赛,全国企业会计信息化知识竞赛测试题
- SpringBoot整合SpringSecurity+JWT实现系统认证、授权
- 没有工作经验,没有的究竟是什么?
- java高级过滤器、baseServlet、log4j配置使用poi实现excel导入数据库
热门文章
- mysql主从同步从库上Slave_IO_Running: Connecting问题
- ELK+kafka日志系统搭建-实战
- RabbitMQ安装方法 安装完成已验证方法步骤可行性
- Go的RESTful
- java修饰符总结,java访问修饰符总结
- 8086汇编4位bcd码_51单片机用汇编语言实现BCD码转换
- css背景上能添加文字,CSS3怎么为文字添加背景?
- 软件工程师生存指南:面试准备、工作经验和实用工具
- 利用python进行数据分析_资料 | 利用Python进行数据分析
- mysql long varchar2_long查询结果转换为varchar2类型