点击上方“潜心的Python小屋”关注我们,第一时间推送优质文章。
前言
大家好,我是潜心。上篇文章提到了Groupby,但其中举例的代码有点问题,在提取序列时用到了for循环,效率很慢,后来查找了官方文档,才明白apply的重要性,再次对Groupby进行深入并总结。
本文约2.1k字,预计阅读15分钟。
Groupby: split-apply-combine
Pandas中Groupby定义如下:
def groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False)
Groupby具体来说指的是涉及以下一个或多个步骤的过程:
分割(Splitting):根据一些标准将数据划分为多个组。
应用(Applying):独立地对每个组应用一个函数。
组合(Combing):将结果组合成数据结构。
其中,分割是最直接的,也是最常用的(如上图)。但是事实上,在许多情况下,我们可能希望将数据集分成组,并对这些组做一些统计值计算。在Applying中,可能希望做以下其中一项:
聚集(Aggregation):计算每个组的汇总统计信息(或统计信息),例如计算分组的和、均值、个数等。
转换(Transformation):执行一些特定组的计算并返回一个like-indexed对象。
过滤(Filteration):根据判断为真或假的组计算,丢弃一些组。
此次我们不讨论Group的分割问题,主要聚焦它的Applying,并结合实际的大数据量的实际表来比较它们的效率问题。采用的数据表为用户与他点击的广告,共100w条:
user_id | creative_id | |
---|---|---|
0 | 30920 | 567330 |
1 | 30920 | 3072255 |
2 | 30920 | 3072255 |
3 | 30920 | 3879497 |
4 | 30920 | 3751623 |
... | ... | ... |
Aggregation
当创建了GroupBy对象,根据需求我们可以对分组的数据执行计算。最简单的是我们通过agg()
方法来调用一些Python内置函数进行聚合计算,常用的内置函数为:mean
、median
、sum
、size
、count
、std
、describe
、min
、max
等。
这里我们基于user_id
对数据进行划分,简单应用部分内置函数,统计对