Pandas学习笔记 04 分组GroupBy
第四章 分组 总结
1 分组模式及其对象
1.1 分组模式
分组的一般模式:df.groupby(分组依据)[数据来源].使用操作
多维度列分组:groupby
中传入相应列名构成的列表
分组依据:列或列的子集、字典或Series
、函数、索引级别等
1.2 GroupBy
对象
ngroups
属性:获取分组个数
groups
属性:返回从组名映射到组索引列表的字典
size
方法:统计每组元素个数
get_group
方法:根据组的具体名称获取对应的行
1.3 分组的三大操作
聚合、变换和过滤,分别对应agg
、transform
和filter
函数,分别返回标量、Series
类型和DataFrame
类型结果。
2 聚合函数
2.1 内置聚合函数
groupby
对象内置聚合函数包括max/min/mean/median/count/all/any/idxmax/idxmin/mad/nunique/skew/quantile/sum/std/var/sem/size/prod
等,均返回标量值。
2.2 agg
方法
agg
函数优点:
-
同时使用多个函数
方法:用列表的形式把内置聚合函数对应的字符串传入
-
对特定的列使用特定的聚合函数
方法:通过构造字典传入,以列名为键
-
使用自定义的聚合函数
-
直接对结果的列名在聚合前进行自定义命名
方法:将原函数位置改写为元组,第一个元素为新名称,第二个元素为函数名。
注意:单个聚合,重命名需要以列表形式传入
3 变换和过滤
3.1 变换函数与transform
方法
变换函数的返回值为同长度的序列,最常用的内置变换函数是累计函数:cumcount/cumsum/cumprod/cummax/cummin
groupby
对象的transform
方法传入自定义函数进行自定义变换,传入值为数据源的序列,返回的结果是行列索引与数据源一致的DataFrame
。当返回一个标量时,会触发广播机制广播到整组。
3.2 组索引与过滤
过滤在分组中是对于组的过滤,而索引是对于行的过滤。
组过滤作为行过滤的推广,指的是对一个组的全体所在行进行统计,如果结果返回True
则会被保留,False
则该组会被过滤,最后把所有未被过滤的组对应的所在行拼接起来作为DataFrame
返回。
groupby
对象的filter
方法可以进行组筛选,其中自定义函数的输入参数为数据源构成的DataFrame
本身,只需保证自定义函数的返回为布尔值。
4 跨列分组apply
同时处理多列数据,可以向apply()
中传入自定义函数进行处理。
不同函数返回值对应结果:
- 标量:结果为
Series
,索引与agg
的结果一致 Series
:结果为DataFrame
,行索引与标量情况一致,列索引为Series
的索引DataFrame
:结果为DataFrame
,行索引最内层在每个组原先agg
的结果索引上,再加一层返回的DataFrame
行索引,同时分组结果DataFrame
的列索引和返回的DataFrame
列索引一致。