groupby函数是用来干嘛的 Groupby详解( 二 )


groupby函数是用来干嘛的 Groupby详解

文章插图
图中的大方框是transform和agg所不一样的地方 。对agg而言 。会计算得到A 。B 。C公司对应的均值并直接返回 。但对transform而言 。则会对每一条数据求得相应的结果 。同一组内的样本会有相同的值 。组内求完均值后会遵从原索引的顺序返回结果 。如果有不怎么理解的可以拿这张图和agg那张对比一下 。
apply
apply应该是各位的老朋友了 。它相比agg和transform而言更加灵活 。能够传入任意自定义的函数 。实现复杂的数据操作 。在Pandas数据处理三板斧 。你会几板?中 。介绍了apply的使用 。那在groupby后使用apply和之前所介绍的有什么区别呢?
区别是有的 。但是整个实现原理是基本一致的 。两者的区别在于 。对于groupby后的apply 。以分组后的分组DataFrame作为参数传入指定函数的 。基本操作单位是DataFrame 。而之前介绍的apply的基本操作单位是Series 。还是以一个案例来介绍groupby后的apply用法 。
假设我现在需要获取各个公司年龄最大的员工的数据 。该怎么实现呢?可以用以下代码实现:In [38]: def get_oldest_staff(x):...:df = x.sort_values(by = 'age',ascending=True)...:return df.iloc[-1,:]...:In [39]: oldest_staff = data.groupby('company',as_index=False).apply(get_oldest_staff)In [40]: oldest_staffOut[40]: company salary age 0A23331B21402C4335这样便得到了每个公司年龄最大的员工的数据 。整个流程图解如下:
groupby函数是用来干嘛的 Groupby详解

文章插图
可以看到 。此处的apply和上篇文章中所介绍的作用原理基本一致 。只是传入函数的参数由Series变为了此处的分组DataFrame 。
最后 。关于apply的使用 。这里有个小建议 。虽然说apply拥有更大的灵活性 。但apply的运行效率会比agg和transform更慢 。所以 。groupby之后能用agg和transform解决的问题还是优先使用这两个方法 。实在解决不了了才考虑使用apply进行操作 。

推荐阅读