Python groupby

954 阅读2分钟

python中groupby函数主要的作用是进行数据的分组以及分组后地组内运算!

那这个生成的DataFrameGroupBy对象,对data进行了groupby后,ipython所返回的结果是其内存地址,并不利于直观地理解。可以将DataFrameGroupBy转换为其他类型。

groupby的过程就是将原有的DataFrame按照groupby的字段,划分为若干个分组DataFrame,被分为多少个组就有多少个分组DataFrame。

1.groupby之后的函数

1.1describe()

描述组内数据的基本统计量

unstack() 索引重排

1.2agg聚合操作:

聚合操作可以用来求和、均值、最大值、最小值等,下面的表格列出了Pandas中常见的聚合操作。

函数 用途 min 最小值 max 最大值 sum 求和 mean 均值 median 中位数 std 标准差 var 方差 count 计数

as_index=False 保持原来的数据索引结果不变

first() 保留第一个数据

Tail(n=1) 保留最后n个数据

1.3transform

image.png

transform和agg所不一样的地方,对agg而言,会计算得到A,B,C公司对应的均值并直接返回,但对transform而言,则会对每一条数据求得相应的结果,同一组内的样本会有相同的值,组内求完均值后会按照原索引的顺序返回结果,如果有不理解的可以拿这张图和agg那张对比一下。

1.4 apply

  1. apply与transform 首先讲一下apply() 与transform()的相同点与不同点

相同点:

都能针对dataframe完成特征的计算,并且常常与groupby()方法一起使用。

不同点:

apply()里面可以跟自定义的函数,包括简单的求和函数以及复杂的特征间的差值函数等(注:apply不能直接使用agg()方法 / transform()中的python内置函数,例如sum、max、min、’count‘等方法)

transform() 里面不能跟自定义的特征交互函数,因为transform是真针对每一元素(即每一列特征操作)进行计算,也就是说在使用 transform() 方法时,需要记得三点:

1、它只能对每一列进行计算,所以在groupby()之后,.transform()之前是要指定要操作的列,这点也与apply有很大的不同。

2、由于是只能对每一列计算,所以方法的通用性相比apply()就局限了很多,例如只能求列的最大/最小/均值/方差/分箱等操作

3、transform还有什么用呢?最简单的情况是试图将函数的结果分配回原始的dataframe。也就是说返回的shape是(len(df),1)。注:如果与groupby()方法联合使用,需要对值进行去重