文章插图
图中的大方框是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这样便得到了每个公司年龄最大的员工的数据 。整个流程图解如下:
文章插图
可以看到 。此处的apply和上篇文章中所介绍的作用原理基本一致 。只是传入函数的参数由Series变为了此处的分组DataFrame 。
最后 。关于apply的使用 。这里有个小建议 。虽然说apply拥有更大的灵活性 。但apply的运行效率会比agg和transform更慢 。所以 。groupby之后能用agg和transform解决的问题还是优先使用这两个方法 。实在解决不了了才考虑使用apply进行操作 。
推荐阅读
- 纯牛奶和鲜牛奶两者有什么区别,哪个营养价值更高一些?
- 目前《热血传奇》有哪些人气比较高的私服?
- 喝纯牛奶好还是鲜牛奶好?
- 素食主义者的好处和坏处 怎么看待素食主义者
- 最近刷到头条很多晒收益的,一天收入几百,其真实性到底有多少?
- 虐狗事件经常发生,为什么这几天何兴丽摔死柯基犬在社会上影响这么大?
- 出塞王昌龄翻译 出塞的注释和译文
- 曾经的热血传奇,还有人玩吗?
- “上海书店事件”男孩父母拒不道歉,熊孩子能坏到什么程度?