对应书本第三部分第6章Pandas分组聚合第1节

对一个DataFrame按第一列进行了分组,分成A、B、C三个组,接着对各个组内部全部进行了求和计算,最后将结果组合成一个新的DataFrame,这样就完成了拆分–应用–合并的全部工作。
groupby语法
df.groupby()方法可以按指定字段对DataFrame进行分组,生成一个分组器对象。
“分组器对象”是一个 GroupBy 对象(pandas.core.groupby.GroupBy)。它本身不是一个直接可见的数据结构,而是一个中间对象,用于表示“按指定规则分组后的数据”,并支持后续聚合、转换、过滤等操作。
df.groupby(by=None, axis=0, level=None,
as_index: bool = True, sort: bool = True,
group_keys: bool = True, observed: bool = False,
dropna: bool = True,
) -> 'DataFrameGroupBy'
分组操作会按指定的规则对数据进行拆分,groupby完成的就是拆分工作。groupby也能对Series完成分组操作。
参数解释如下:
- by:代表分组的依据和方法。如果by是一个函数,则会在数据的索引的每个值去调用它,从而产生值,按这些值进行分组。如果
传递dict或Series,则将使用dict或Series的值来确定组;如果传递ndarray,则按原样使用这些值来确定组。传入字典,键为原索引
名,值为分组名。 - axis:沿行(0)或列(1)进行拆分。也可传入index或columns,默认是0。
- level:如果轴是多层索引(MultiIndex),则按一个或多个特定的层级进行拆分,支持数字、层名及序列。
- as_index:数据分组聚合输出,默认返回带有组标签的对象作为索引,传False则不会。
- sort:是否对分组进行排序。默认会排序,传False会让数据分组中第一个出现的值在前,同时会提高分组性能。
- group_keys:调用函数时,将组键添加到索引中进行识别。
- observed:仅当分组是分类数据时才适用。如果为True,仅显示分类分组数据的显示值;如果为False,显示分类分组数据的所有
值。 - dropna:如果为True,并且组键包含NA值,则NA值及行/列将被删除;如果为False,则NA值也将被视为组中的键。
以上大多参数对于Series也是适用的,如果对DataFrame进行分组会返回DataFrame-GroupBy对象,对Series分组会返回SeriesGroupBy对象
使用示例

DataFrame应用分组
分组求和

分组后聚合

聚合时同一列使用不同方法

Series应用分组
对Series也可以使用分组聚合,但相对来说场景比较少。在下例中,df.Q1是一个Series,它的分组依据是df.team。根据groupby的语法,如果给by参数传入一个Series,此Series与被分组数据的索引对齐后,按Series的值进行分组。

