专栏首页小数志Pandas中groupby的这些用法你都知道吗?

Pandas中groupby的这些用法你都知道吗?

导读

pandas作为Python数据分析的瑞士军刀,集成了大量实用的功能接口,基本可以实现数据分析一站式处理。前期,笔者完成了一篇pandas系统入门教程,也针对几个常用的分组统计接口进行了介绍,今天再针对groupby分组聚合操作进行拓展讲解。

01 如何理解pandas中的groupby操作

groupby是pandas中用于数据分析的一个重要功能,其功能与SQL中的分组操作类似,但功能却更为强大。理解groupby的原理可参考官网给出的解释:

其中:

  • split:按照某一原则(groupby字段)进行拆分,相同属性分为一组
  • apply:对拆分后的各组执行相应的转换操作
  • combine:输出汇总转换后的各组结果

02 分组(split)——groupby

groupby首先要指定分组原则,这也是groupby函数的第一步,其常用参数包括:

  • by,分组字段,可以是列名/series/字典/函数,常用为列名
  • axis,指定切分方向,默认为0,表示沿着行切分
  • as_index,是否将分组列名作为输出的索引,默认为True;当设置为False时相当于加了reset_index功能
  • sort,与SQL中groupby操作会默认执行排序一致,该groupby也可通过sort参数指定是否对输出结果按索引排序

另有其他参数,但很少用到不再列出。给出几个典型应用示例:

示例数据

  • 单列作为分组字段,不设置索引
  • 单列字段的转换格式作为分组字段
  • 字典,根据索引对记录进行映射分组
  • 函数,根据函数对索引的执行结果进行分组

03 转换(apply)——agg/apply/transform

分组之后的第二个步骤即为分组转换操作,也就是应用(apply)一定的函数得到相应的结果。常用的执行操作方式有4种:

  • 直接加聚合函数,但只能实现单一功能,常用聚合函数包括:mean/sum/median/min/max/last/first等,最为简单直接的聚合方式
  • agg(或aggregate),执行更为丰富的聚合功能,常用列表、字典等形式作为参数

例如需要对如上数据表中两门课程分别统计平均分和最低分,则可用列表形式传参如下:

如果想对语文课求平均分和最低分,而数学课求平均分和最高分,则可用字典形式参数:

  • apply,除了agg丰富的可选聚合函数外,apply还可以自定义面向分组的聚合函数

这里apply函数实际上是一个应用非常广泛的转换函数,例如面向series对象,apply函数的处理粒度是series的每个元素(标量);面向dataframe对象,apply函数的处理粒度是dataframe的一行或一列(series对象);而现在面向groupby后的group对象,其处理粒度则是一个分组(dataframe对象)。例如,需要计算每个班级语文平均分与数学平均分之差,则用apply会是一个理想的选择:

  • transform,又一个强大的groupby利器,其与agg和apply的区别相当于SQL中窗口函数和分组聚合的区别:transform并不对数据进行聚合输出,而只是对每一行记录提供了相应聚合结果;而后两者则是聚合后的分组输出。

例如,想对比个人成绩与班级平均分,则如下操作会是首选:

当然,这一操作也可以通过mean聚合+merge连接实现:

实际上,pandas中几乎所有需求都存在不止一种实现方式!


04 时间序列的groupby——resample

再次指出,groupby相当于是按照某一规则对数据进行分组聚合,当分组的规则是时间序列时,还存在另一种特殊的分组方式——重采样resample。理解groupby的split-apply-combine三步走处理流程,那么自然也很容易理解resample处理流程:按照时间split——apply——combine。同时,也正因为resample是一种特殊的分组聚合,所以groupby的4种转换操作自然也都适用于resample。

生成以下含有时间序列的样例数据:

需统计每15天的平均分数,用resample可实现如下:

当然,这是直接用了聚合函数,更复杂的例如agg、apply和transform等用法也是一样的。换句话说,resample与groupby的核心区别仅在于split阶段:前者按照时间间隔进行分组,而后者是按照定义的某种规则进行分组。

另外,还可将groupby与resample链式使用,但仅可以是resample在groupby之后,反之则会报错。例如:

需要指出,resample等价于groupby操作一般是指下采样过程;同时,resample也支持上采样,此时需设置一定规则进行插值填充。

本文分享自微信公众号 - 小数志(Datazhi),作者:luanhz

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 从pandas中的这几个函数,我看懂了道家“一生二、二生三、三生万物”

    pandas是用python进行数据分析最好用的工具包,没有之一!从数据读写到预处理、从数据分析到可视化,pandas提供了一站式服务。而其中的几个聚合统计函数...

    luanhz
  • 总结 | DataFrame、Series、array、tensor的创建及相互转化

    最近在入门图像识别,自然也会用到深度学习框架,也接触到了一个新的数据结构——tensor(张量)。除此之外,也有一些很常用的数据结构,比如DataFrame、S...

    luanhz
  • python数据科学系列:matplotlib入门详细教程

    上篇中,介绍了numpy的常用接口及使用,并对部分接口方法进行了详细对比。与之齐名,matplotlib作为数据科学的的另一必备库,算得上是python可视化领...

    luanhz
  • 使用Groovy进行Bash(shell)操作

    没用!!!文件未删除。 碰巧代理程序以与运行tomcat的用户不同的身份运行。该代理无权删除目录。

    FunTester
  • [springboot 开发单体web shop] 6. 商品分类和轮播广告展示

    从上图我们可以看出,商品的分类其实是有层级关系的,而且这种关系一般都是无限层级。在我们的实现中,为了效果的展示,我们仅仅是展示3级分类,在大多数的中小型电商系统...

    Isaac Zhang
  • 大数据存储HDFS详解

    Google Protocol Buffers(ProtoBuf):只有序列化功能,不具备RPC功能。

    凹谷
  • 手动计算深度学习模型中的参数数量

    为什么我们需要再次计算一个深度学习模型中的参数数量?我们没有那样去做。然而,当我们需要减少一个模型中的文件大小甚至是减少模型推理的时间时,我们知道模型量化前后的...

    AI研习社
  • 《每日一荐月刊》2020-01

    尤雨溪在多伦多的演讲《Vue 3.0 设计原则》对于想要学习 Vue3.0 或者想要直接从零开发 Vue3.0 的人来说,绝对是必读的。PPT 内容不多,几分钟...

    lucifer210
  • Windows全版本提权工具

    最近新出的一个windows全版本通杀的提权exp(CVE-2020-0787)亲测真香,推荐大家使用,直接上地址

    轩辕小子
  • Android Camera SurfaceView 预览拍照

    Android使用 Camera API + SurfaceView 方式进行预览拍照。

    glumes

扫码关注云+社区

领取腾讯云代金券