Pandas里Groupby的apply用法
Pandas的Groupby函数即分组聚合函数,与SQL的Groupby有着异曲同工之妙,而我这里记录的是Groupby里的apply函数用法,即针对每个分组进行相应的数据处理,如下图简单的分组求和:
原数据按照Key分组并求和
df.groupby('key').apply(lamdba x: x['v'].sum())
从上可以得到apply中的参数x相当于是分组后的每种key包含的行数据,从行数据中找到'v'列并求和 即可返回每种key的v的求和数(这里如果要将key从index释放出来则使用reset_index())
下面是apply的另外一种用途,即保证原数据的前提下把分组后求得的和与原数据合并,首先我们先定义一个函数
def func_sum(df):
df['v_sum'] = df['v'].sum()
return df
可以看到原数据添加了新的一列,这一列的值是每种key对应的v的和,上述自定义函数这类方法更具有灵活性,可以同时求和,平均,最大值,最小值,排序等等
以上便是对于Groupby中的apply函数的简单介绍,在Groupby中还有一类函数,那就是agg函数,这个函数只能实现特定的聚合操作,比如mean,sum, apply函数可以说是它的泛化,比如你可以用apply实现组内排序,但是agg函数并不能。
Pandas里Groupby的agg函数用法
agg函数传入一个字典,键指对应的列名,值指聚合函数如{'sum', 'count', 'mean'}之类
下面的操作是agg的简化版
同样可以达到聚合的目的,但是实现排序等操作时则需要用到比较高级的apply函数或者rank
而当需要在原数据的index上返回结果,可以使用pandas.Groupby.transform, 这样可以将统计结果还原到组内每一条数据中