《利用Python进行数据分析》 12.2高阶GroupBy应用

第十二章 高阶pandas


12.2 高阶GroupBy应用


12.2.1 分组转换和“展开”GroupBy


   内建方法transform,与apply方法类似但是会对你可以使用的函数种类加上更多的限制:

· transform可以产生一个标量值,并广播到各分组的尺寸数据中

· transform可以产生一个与输入分组尺寸相同的对象

· transform不可改变它的输入

示例:

操作1:按key取均值(见图12-1)

15259227-376c8a931beeb866.png
图12-1:操作1

操作2:产生一个Series,它的尺寸和df['value']一样,但值都被按’key'分组的均值替代(见图12-2)

15259227-7966a9d3e96ac156.png
图12-2:操作2

操作3:与apply类似,transform可以与返回Series的函数一起使用,但结果必须和输入有相同的大小。例如,我们可以使用lambda函数给每个组乘以2。(见图12-3)

15259227-7da8c4210b49072b.png
图12-3:操作3

操作4:一个更复杂的例子,我们可以按照每个组的降序计算排名(见图12-4)

15259227-b0a5ca6d871ebc66.png
图12-4:操作4

操作5:一个由简单聚合构成的分组转换函数,使用transform或apply可以获得等价的结果(见图12-5)

15259227-70950f791601590c.png
图12-5:操作5

操作6:内建的聚合函数如’mean’或’sum’通常会比apply函数更快。这些函数在与transform一起使用时也会存在一个"快速通过"。这允许我们执行一个所谓的展开分组操作。(见图12-6)

扫描二维码关注公众号,回复: 5194081 查看本文章
15259227-fdf04fd7603e37ce.png
图12-6:操作6

:然而一个展开分组操作可能会包含多个分组聚合,矢量化操作的整体优势往往超过了这一点


12.2.2 分组的时间重新采样

      对于时间序列数据,resample方法在语义上是一种基于时间分段的分组操作。(见图12-7)

15259227-af0b995ee2976468.png
图12-7:示例表

按‘time’进行索引,然后重新采样(见图12-8)

15259227-b95a9ee85821e794.png
图12-8:重新采样

假设DataFrame包含多个时间序列,并按一个附加的分组键列进行了标记(见图12-9)

15259227-0728bf5479010c16.png
图12-9:按附加分组键标记

要为每个’key’的值进行相同的重新采样,我们可以使用pandas.TimeGrouper对象(见图12-10)

15259227-c5a053bed66b5d2d.png
图12-10:pandas.TImeGrouper方法

设置时间索引,按’key’和time_key进行分组,再聚合(见图12-11)

15259227-c03c8d031835595f.png
图12-11:设置时间索引、分组、聚合

注:使用TimeGrouper的一个限制是时间必须是Series或DataFrame的索引。


猜你喜欢

转载自blog.csdn.net/weixin_33717117/article/details/87231588