数据的聚合运算
聚合函数
聚合就是在groupby方法对数据进行分组时,GroupBy对象高效的对数据进行切片,对每个切片使用指定的运算方法,并将结果组装成最终结果的过程。
下表列出的是最常使用的作用于GroupBy对象的聚合运算方法,
1)选取GroupBy对象的一列聚合运算
2)选取GroupBy对象的多列聚合运算
3)自定义聚合函数(aggregate和agg方法)
如果使用的是自己编写的聚合函数,需要使用aggregate或者agg方法传入GroupBy对象后才能被执行,
聚合高级应用
首先创建一个小费的DataFrame用于之后的演示,
面向列的多函数应用
之前使用 aggregate方法,或者直接使用pandas的聚合方法都是对一个或者多个列执行同一种方法,现在有需求是同时对不同列使用不同的聚合方法,继续使用上方的小费数据集,
1)agg方法对GroupBy对象的一列使用一个方法
2)agg方法对GroupBy对象的一列使用多个方法
agg方法对分组变量的tip_pct这列进行多种方法的操作后,可以指定列名,方式是传入(name,function)这样的元组构成的列表,
3)agg方法对多列使用多种相同的方法
得到的结果列名也是层次化的,
4)agg方法对分组变量的多列使用多种不同的方法
具体的做法是传入一个字典,key是要操作的列名,value是执行的不同的函数,
无索引形式返回聚合变量(groupby方法as_index=False)
之前的例子中,用于分组的列都最终变为分组变量和聚合变量的索引,如果设置groupby方法的as_index参数为False,则用于分组的列不会以索引形式出现在结果中,但是出现在最前面的列中,
官方文档中提示,as_index=False会在一定程度上使结果缺乏灵活性。
分组别运算和转换
1)transform方法
一般的,mean方法是对分组变量进行操作,最终得到的也是分组的结果,
先将np.mean方法作用到groupby产生的不同的GroupBy对象上,之后再将结果放置到适当地位置上,
transform所得结果的索引与源数据相同,此外,transform方法也支持传入自定义函数,
2)apply方法
该方法的演示使用之前的小费数据集,apply方法将数据分成小块,并对每一块使用传入的方法,最后再将各片段组合。首先选出tip_pct最高的几个记录,
上面是对整个dataframe使用top方法返回的结果,现在想获取到通过“smoker”这一列进行分组后,每组最高的前几名的方法如下,
如果是根据多列进行分组,再使用apply方法,
apply方法是对每个组执行传入的方法,分组变量最终形成groupby对象的索引,可以使用group_keys参数指定是否禁止分组键,
返回的对象不会把分组变量作为索引,与之前内容中as_index参数的区别是,group_keys为False时,分组列的位置不会变动。
3)cut与qcut方法的分组运算
cut方法和qcut方法的使用参考笔记,首先回顾cut方法的使用,
cut方法返回的对象可以直接用于groupby方法,
qcut与cut方法的分组运算同理,