pandas提供了一个灵活高效的groupby功能,它能以一种自然的方式对数据集进行切片、切块、摘要等操作。
本章中将会看到Python和pandas强大的表达能力,可以执行复杂得多的分组运算(利用任何可以接受pandas对象或Numpy数组的函数),本章中将会学到:
-
根据一个或多个键(可以是函数、数组或DataFrame列名)拆分pandas对象
-
计算分组摘要统计,如计数、平均值、标准差,或用户自定义函数。
-
对DataFrame的列应用各种各样的函数
-
应用组内转换或其他运算,如规格化、线性回归、排名或选取子集等
-
计算透视表或交叉表
-
执行分位数分析以及其他分组分析
注意:对事件数据的聚合(groupby的特殊用法之一)也称作重采样,会单独讲解
1、GroupBy技术“split-appy-combain”(拆分-应用-合并)
-
pandas对象中的数据根据提供的一个或多个键被拆分(split)为多组。拆分是按轴进行的 axis=0行 axis=1列
-
将一个函数应用(apply)到各个分组并产生一个新值
-
最后,函数的执行结果会被合并(combain)到最终的结果对象中
结果对象的形式一般取决于数据上所执行的操作
下图是一个简单的分组聚合过程
分组键可以有多重形式,且类型不必相同:
- 列表或数组,其长度与待分组的轴一样
- DataFrame的某列
- 字典或Series,给出待分组轴上的值与分组名之间的对应关系
- 函数,用于处理轴索引或索引中的各个标签
注意:后三种都只是快捷方式而已,其最终的目的仍然是产生一组用于拆分对象的值。
1.按照列表或数组分组,其长度与待分组的轴一样
2、按照DataFrame的某列分组
上例中,因为key2列不是数值数据,所以被过滤掉了。默认情况下,所有数值都会被聚合,虽然有时候可能会被过滤为一个子集
无论用group做什么,都有可能会用到GroupBy的Size方法,它可以返回一个含有分组大小的Series:
注意:任何分组关键词中的缺失值,都会被从结果中除去。
查看分组后的结果:
GroupBy对象支持迭代,可以产生一组二元元组(由分组名和数据块组成)
对于多重键的情况,元组的第一个元素将会是由键值组成的元组:
当然可以对这些数据片段做任何操作。一个可能有用的操作是 将这些数据片段做成一个字典。