SAC
SAC指的是分组操作中的split-apply-combine过程:
split指基于某一些规则,将数据拆成若干组,
apply是指对每一组独立地使用函数,
combine指将每一组的结果组合成某一类数据结构
apply过程
整合(Aggregation)——即分组计算统计量(如求均值、求每组元素个数)
变换(Transformation)——即分组对每个单元的数据进行操作(如元素标准化)
过滤(Filtration)——即按照某些规则筛选出一些组(如选出组内某一指标小于50的组)
综合问题——即前面提及的三种问题的混合
groupby函数
DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False, **kwargs)
by:mapping、函数、标签或标签列表
axis : {0 or ‘index’, 1 or ‘columns’} 按行/列分组
level:如果轴是一个多索引(层次结构),则按一个或多个特定级别分组
as_index:对于聚合的输出,返回以组标签为索引的对象。
sort:Groupby保留每个组中的行顺序。
group_keys:在调用apply时,将组键添加到索引中以标识块。
squeeze:降低返回类型的维数,否则返回一个一致的类型。
聚合、过滤和变换
聚合(Aggregation)
就是把一堆数,变成一个标量,因此mean/sum/size/count/std/var/sem/describe/first/last/nth/min/max都是聚合函数
过滤(Filteration)
filter函数是用来筛选某些组的,因此传入的值应当是布尔标量
grouped_single[['Math','Physics']].filter(lambda x:(x['Math']>32).all())
变换(Transformation)
传入对象:transform函数中传入的对象是组内的列,并且返回值需要与列长完全一致
grouped_single[['Math','Height']].transform(lambda x:x-x.min()).head()
apply函数
返回值的多样性:
1.标量返回值
2.列表返回值
3.数据框返回值