Pandas中实现聚合统计,有几种方法?

导读

这里首先给出模拟数据集,不妨给定包括如下两列的一个dataframe,需求是统计各国将领的人数。应该讲这是一个很基础的需求,旨在通过这一需求梳理pandas中分组聚合的几种通用方式。
01 value_counts
上述需求是统计各国将领的人数,换言之就是在上述数据集中统计各个国家出现的次数。所以实现这一目的只需简单的对国家字段进行计数统计即可:

当然,以上实现其实仅适用于计数统计这种特定需求,对于其他的聚合统计是不能满足的。

02 groupby+count
第一种实现算是走了取巧的方式,对于更为通用的聚合统计其实是不具有泛化性的,那么pandas中标准的聚合是什么样的呢?对于上述仅有一种聚合函数的例子,在pandas中更倾向于使用groupby直接+聚合函数,例如上述的分组计数需求,其实就是groupby+count实现。
进一步的,其具体实现形式有两种:
  • 分组后对指定列聚合,在这种形式中依据country分组后只提取name一列,相当于每个country下对应了一个由多个name组成的series,而后的count即为对这个series进行count。
  • 分组后直接聚合,然后再提取指定列。此时,依据country分组后不限定特定列,而是直接加聚合函数count,此时相当于对列都进行count,此时得到的仍然是一个dataframe,而后再从这个dataframe中提取对特定列的计数结果。

值得指出,在此例中country以外的其他列实际上也是只有name一列,但与第一种形式其实也是不同的,具体在于未加提取name列之前,虽然也是只有name一列,但却还是一个dataframe:

03 groupby+agg
上述方法是直接使用groupby+相应的聚合函数,这种聚合统计方法简单易懂,但缺点就是仅能实现单一的聚合需求,对于有多种聚合函数的情况是不适用的。此时,功能更为强大的agg函数随之登场。agg是aggregation的缩写,可见其是专门用于聚合统计的,其可以接收多种不同的聚合函数,因而更具可定制性。
agg函数主要接收两个参数,第一个参数func用于接收聚合算子,可以是一个函数名或对象,也可以是一个函数列表,还可以是一个字典,使用方法很是灵活;第二参数axis则是指定聚合所沿着的轴向,默认是axis=0,即沿着行的方向对列聚合。agg的函数文档如下:
这里,仍然以上述分组计数为例,讲解groupby+agg的三种典型应用方式:
  • agg内接收聚合函数或聚合函数列表。具体实现形式也分为两种,与前面groupby直接+聚合函数的用法类似。实际上,该种用法其实与groupby直接+聚合函数极为类似。
  • agg内接收聚合函数字典,其中key为列名,value为聚合函数或函数列表,可实现同时对多个不同列实现不同聚合统计。这里字典的key是要聚合的name字段,字典的value即为要用的聚合函数count,当然也可以是包含count的列表的形式。用字典传入聚合函数的形式下,统计结果都是一个dataframe,更进一步的说当传入字典的value是聚合函数列表时,结果中dataframe的列名是一个二级列名。
  • agg内接收新列名+元组,实现对指定列聚合并重命名。对于聚合函数不是特别复杂而又希望能同时完成聚合列的重命名时,可以选用此种方式,具体传参形式实际上采用了python中可变字典参数**kwargs的用法,其中字典参数中的key是新列名,value是一个元组的形式,包括聚合字段列名和聚合函数。
04 groupby+apply

如果说上述实现方式都还是pandas里中规中矩的聚合统计,那么这一种方式则是不是该算是一种骚操作?实际上,这是应用了pandas中apply的强大功能,具体可参考历史推文Pandas中的这3个函数,没想到竟成了我数据处理的主力

由于apply支持了多种重载方法,所以对于分组后的grouped dataframe应用apply,也可实现特定的聚合函数统计功能。首先看如下实际应用:
在上述方法中,groupby('country')后的结果,实际上是得到了一个DataFrameGroupBy对象,实际上是一组(key, value)的集合,其中每个key对应country列中的一种取值,每个value为该key对应的一个子dataframe,具体拆解打印如下:

而后,groupby后面接的apply函数,实质上即为对每个分组下的子dataframe进行聚合,具体使用何种聚合方式则就看apply中传入何种参数了!

05 总结

本文针对一个最为基础的聚合统计场景,介绍pandas中4类不同的实现方案,其中第一种value_counts不具有一般性,仅对分组计数需求适用;第二种groupby+聚合函数,是最为简单和基础的聚合统计,仅适用于单一聚合函数的需求;第三种groupby+agg,具有灵活多样的传参方式,是功能最为强大的聚合统计方案;而第四种groupby+apply则属于是灵活应用了apply的重载功能,可以用于完成一些特定的统计需求。

最后,虽然本文以简单的分组计数作为讲解案例,但所提到的方法其实是能够代表pandas中的各种聚合统计需求。


(0)

相关推荐

  • Python数据分析,办公自动化,如何数据分组与透视?

    数据分组是对相同类别的数据进行汇总,而数据透视表是通过对行或列的不同组合对数据进行汇总,所使用的汇总方法有求和.计数.平均值.标准差等,本文使用Python对数据进行数据分组和数据透视,下面一起来学习 ...

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

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

  • Word中输入特殊符号的3种方法,熟练掌握1种,工作就够用了

    [温馨提示]亲爱的朋友,阅读之前请您点击[关注],您的支持将是我最大的动力! 以前教程中分享过<Excel中如何输入特殊的字符?如勾.叉.平方.立方等 >,有粉丝问道在Word文档中如何输 ...

  • 中蜂介王台有几种方法?哪一种成功率高?养蜂人介王的经验

    加入我们一起学养蜂 养蜂技术是一门值得不断学习的技艺,每天一起无保留的学养蜂,交流养蜂!未关注的蜂友请先点击上方蓝字"追花精灵"再点关注,以免走失找不到 追花精灵 传递国内外蜂业前 ...

  • 国画中如何表现雨景,三种方法供你选择!

    近日全国各地都下起了大雨 不禁想问国画中是如何表现雨景的呢? 翻看一些资料后小编总结了三种方法 看看你喜欢哪一种表现方式? 一.直接表现下雨 雨景是不好画的,没有固定的形状也没有明显的色彩,不像雪可以 ...

  • 国画中如何表现雨景?三种方法供你选择

    国画中是如何表现雨景的呢? 以下三种方法 看看你喜欢哪一种表现方式 一.直接表现下雨 雨景是不好画的,没有固定的形状也没有明显的色彩,不像雪可以改变景物的面貌,比缥缈的云雾还难以表现,但是还是有能人表 ...

  • Excel中快速合并内容的几种方法,超级实用,方便高效

    在我们日常工作中,录入好的表格内容,有时需要把一些内容合并到一起,如果是重新打字录入,工作量是相当大啊.今天阿钟老师根据实例分享几种合并内容的方法. 01.多个单元格内容合并到一起(函数公式法) 公式 ...

  • Excel中一对多查询的5种方法

    如下图所示,查询右侧员工编号为"45424"的所有的销售数量. 方法01 辅助列+VLOOKUP 对于查询类的问题,大家第一时间可能想到的会是VLOOKUP函数,是的小必老师给大家 ...

  • 软件类项目人工成本统计的两种方法

    软件类项目中人力成本占了主要部分,项目的实际人力成本决定了项目的利润. 在实际工作中往往有这样一个现象:项目立项预算时,利润都很高,到最后核算部门利润却往往低得多. 这是因为软件类项目人力成本很难预算 ...

  • 快速解决高考选择题中的压轴题的九种方法

    快速解决高考选择题中的压轴题的九种方法

  • 如何删除 Excel 表格中的所有重复行? 4 种方法都很简便

    如果数据表的某一列中有重复单元格,要去重还是比较容易的,但是如果数据表中存在所有单元格完全重复的行,如何快速找到这些重复行并且去重呢? 案例: 下图中的数据表分别有两对完全重复的行,请删除所有重复行. ...