对分组数据进行聚合操作,是指先用数据框的 groupby() 按一个或多个列的值分成若干组,再对每个组进行汇总、统计、计算,从而提取有用的信息。本节的实现方法是分组对象的 agg 方法。课程给出的聚合操作及对应函数名为:求和(sum)、计数(count)、平均值(mean)、最大值(max)、最小值(min)等。agg 的参数是一个字典:列标签是键,操作名是值。
示例数据框包含「姓名、分区、一季度~四季度」,人员分属天河、黄埔、越秀。先执行 group = df.groupby('分区'),再按三种方式调用 agg。(1)对一个列标签执行一种聚合:group.agg({'一季度':'sum'}),结果为天河 9116、越秀 6939、黄埔 11991,表示各区一季度所有人的总和。(2)对一个列标签执行多种聚合:group.agg({'一季度':['sum','max']}),字典的值改为操作名列表,一季度下同时出现 sum 与 max 两列,天河为 9116 和 4109(4109 为该区一季度最大值)。(3)对多个列标签执行多种聚合:group.agg({'一季度':['sum','max'],'二季度':['mean','min']}),每个列标签和操作构成一个键值对。天河二季度 mean 为 3492.0、min 为 2322;越秀为 2292.5 与 1214;黄埔为 2934.0 与 1831。
易错点:必须先 groupby 得到分组对象再调用 agg;字典的键必须是已有列标签;一种聚合写字符串(如 'sum'),多种聚合写列表(如 ['sum','max']),不要把多种操作写成一个字符串;多列时每个列各自一对键值,不要把不同列的操作混在同一个值里。聚合结果以分组键「分区」为行索引,多种聚合时列名呈多层结构。agg 把每个组压成一行汇总,不要与下一节 transform()(结果对齐回原始各行)混淆。
agg 方法对每组做汇总、计算。sum、计数 count、平均值 mean、最大值 max、最小值 min。group.agg({'一季度':'sum'})。{'一季度':['sum','max']}。{'一季度':['sum','max'],'二季度':['mean','min']}。agg 压成每组一行,不同于 transform()。