pandas中的分组函数groupby()可以完成各种分组操作,聚合函数agg()可以将多个函数的执行结果聚合到一起,这两类函数经常在一起使用。
groupby(self, by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=no_default, observed=False, dropna=True)
:
by: 指定根据哪个/哪些字段分组,默认值是None,按多个字段分组时传入列表。by参数可以按位置参数的方式传入。
axis: 设置按列分组还是按行分组,0或index表示按列分组,1或columns表示按行分组,默认值为0。
level: 当DataFrame的索引为多重索引时,level参数指定用于分组的索引,可以传入多重索引中索引的下标(0,1…)或索引名,多个用列表传入。
level参数不能与by参数同时使用,如果两者同时存在,当by参数传入的是多重索引中的索引,则level不生效,当by参数传入的是DataFrame的列名,则报错。
as_index: 分组结果默认将分组列的值作为索引,如果按单列分组,结果默认是单索引,如果按多列分组,结果默认是多重索引。将as_index设置为False可以重置索引(0,1…)。
sort: 结果按分组列的值升序排列,将sort设置为False则不排序,可以提升性能。
dropna: 默认情况下,分组列的NaN在分组结果中不保留,将dropna设置为False,可以保留NaN分组。
其他三个参数不用关注,group_keys参数在源码中未使用,squeeze参数因为类型不兼容,官方已弃用,observed参数表示重设索引时,保留创建的全NaN行。
agg(self, func=None, axis=0, *args, **kwargs)
:
func: 用于聚合数据的函数,如max()、mean()、count()等,函数必须满足传入一个DataFrame能正常使用,或传递到DataFrame.apply()中能正常使用。
func参数可以接收函数的名字、函数名的字符串、函数组成的列表、行/列标签和函数组成的字典。
axis: 设置按列还是按行聚合。设置为0或index,表示对每列应用聚合函数,设置为1或columns,表示对每行应用聚合函数。
*args: 传递给函数func的位置参数。
**kwargs: 传递给函数func的关键字参数。
返回的数据分为三种:scalar(标量)、Series或DataFrame。
scalar: 当Series.agg()聚合单个函数时返回标量。
Series: 当DataFrame.agg()聚合单个函数时,或Series.agg()聚合多个函数时返回Series。
DataFrame: 当DataFrame.agg()聚合多个函数时返回DataFrame。