前言:
Hadley Wickham创造了一个用于表示分组运算的术语“split-apply-combine”(拆分-应用-合并)。第一个阶段,pandas对象中的数据会根据你所提供的一个或多个键被拆分(split)为多组。拆分操作是在对象的特定轴上执行的。例如,DataFrame可以在其行(axis=0)或列(axis=1)上进行分组。然后,将一个函数应用(apply)到各个分组并产生一个新值。最后,所有这些函数的执行结果会被合并(combine)到最终的结果对象中。结果对象的形式一般取决于数据上所执行的操作。下图大致说明了一个简单的分组聚合过程。
1. 按列分组
按列分组分为以下三种模式:
第一种:df.groupby(col),返回一个按列进行分组的groupby对象;
第二种:df.groupby([col1,col2]),返回一个按多列进行分组的groupby对象;
第三种:df.groupby(col1)[col2] 或者 df[col2].groupby(col1),两者含义相同,返回按列col1进行分组后col2的值;
首先生成一个表格型数据集:
2 遍历各分组
GroupBy对象支持迭代,可以产生一组二元元组(由分组名和数据块组成)。
例如:对groupby对象进行迭代,并打印出分组名称和每组元素。
关键技术:采用for函数进行遍历,name表示分组名称,group表示分组数据。程序代码如下所示:
对于多重键的情况,元组的第一个元素将会是由键值组成的元组:
当然,你可以对这些数据片段做任何操作。有一个你可能会觉得有用的运算,将这些数据片段做成一个字典:
groupby默认是在axis=0上进行分组的,通过设置也可以在其他任何轴上进行分组。拿上面例子中的df来说,我们可以根据dtype对列进行分组:
可以如下打印分组: