前言
在日常的数据分析中,经常需要将数据根据某个(多个)字段划分为不同的群体(group)进行分析,如电商领域将全国的总销售额根据省份进行划分,分析各省销售额的变化情况,社交领域将用户根据画像(性别、年龄)进行细分,研究用户的使用情况和偏好等,在Pandas中,上述的数据处理操作主要运用groupby完成。
如无特殊说明,本章所使用数据为 尿检结果.xls
介绍
Pandas分组统计函数原型为:
|
|
其中各参数参数含义如下:
参数 介绍 | |
---|---|
by |
分组依据 |
axis |
按行分组还是按列分组 |
as_index |
控制聚合输出是否以组标签为索引值 |
level |
如果是多级索引,则按一个或多个特定级别分组 |
sort |
组间排序,关闭可以获得更好的性能 |
group_keys |
当调用apply时,将组关键字添加到索引以识别片段 |
dropna |
是否删除Nan值 |
使用
分组
- 分组 在Pandas中,实现分组操作的代码很简单,在此将上面的数据集按照“送检科室”字段进行划分:
|
|
将上述代码运行后,会得到一个DataFrameGroupBy对象(result),是一个内存地址,可以使用result.groups
命令查看分组情况。为了利于观察,这里可以把group转换成list的形式来看一看:
转换成列表的形式后,可以看到,结果是由元组组成的列表,每个元组中,第一个元素是组别关键字,第二个元素的是对应组别下的DataFrame数据。总的来说,groupby的过程就是将原有的DataFrame按照groupby的字段(这里是“送检科室”),划分为若干个分组DataFrame,被分为多少个组就有多少个分组DataFrame。所以说,在groupby之后的一系列操作(如agg、apply等),均是基于子DataFrame的操作。
- 遍历分组 可以直接使用Python的for-in语句遍历分组结果1:
|
|
- 选择分组
使用
get_group()
方法,可以选择一个组。
|
|
聚合
聚合函数为每个组返回单个聚合值,当创建了分组(groupby)对象,就可以对分组数据执行多个聚合操作,主要的聚合函数有以下三种:
agg
agg方法是groupby聚合的常用方法,主要有min、max、sum、mean、median、std、var、count等统计方法,其常用有以下几种场景:
|
|
transform
有时候我们需要将聚合结果与原数据进行关联运算,这时候便要使用transform,它的聚合结果的索引大小与被分组的索引相同的对象,以至于很容易与原DataFrame数据进行二次运算。2 例:获取同一分组中血小板计数在本组均值的偏离情况
|
|
apply
apply相比agg和transform而言更加灵活,能够传入任意自定义的函数,实现复杂的数据操作。3以下代码用于获取每组中血红蛋白最大的数据:
|
|
filter
filter()
函数用于过滤数据,它会根据定义的标准过滤数据并返回数据的子集。
例:过滤出均值大于7的分组
|
|
参考
-
奔跑的乌班. pandas分组统计 - groupby功能. CSDN. [2019-01-05] ↩︎
-
大邓. 如何理解pandas中的transform函数. 知乎. [2019-10-12] ↩︎
-
Python读财. Pandas数据分析教程——超好用的Groupby用法详解. 简书. [2020-01-06] ↩︎