专栏首页小数志从pandas中的这几个函数,我看懂了道家“一生二、二生三、三生万物”

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

导读

pandas是用python进行数据分析最好用的工具包,没有之一!从数据读写到预处理、从数据分析到可视化,pandas提供了一站式服务。而其中的几个聚合统计函数,不仅常用更富有辩证思想,细品之下不禁让人拍手称快、直呼叫好!

本文主要讲解pandas中的7个聚合统计相关函数,所用数据创建如下:

01 nunique

number of unique,用于统计各列数据的唯一值个数,相当于SQL语句中的count(distinct **)用法。nunique()既适用于一维的Series也适用于二维的DataFrame,但一般用于Series较多,此时返回一个标量数值,表示该series中唯一值的个数。

例如,想统计前面数据表中开课的个数,则可用如下语句:

02 unique

nunique用于统计唯一值个数,而unique则用于统计唯一值结果序列。接收一个series类型作为输入,返回一个去重后的一维ndarray对象作为输出。

正因为各列的返回值是一个ndarray,而对于一个dataframe对象各列的唯一值ndarray长度可能不一致,此时无法重组成一个二维ndarray,从这个角度可以理解unique不适用于dataframe的原因。

仍以前述为例,想统计所有开课的课程名,则可用如下语句:

03 value_counts

如果说unique可以返回唯一值结果的话,那么value_counts则在其基础上进一步统计各唯一值出现的个数;类似的,unique返回一个无标签的一维ndarray作为结果,与之对应value_counts则返回一个有标签的一维series作为结果。

例如,在上述例子中,不仅想知道开课的课程名,还需了解各门课的选课人数,可用语句为:

如果说前面的三个函数主要适用于pandas中的一维数据结构series的话(nunique也可用于dataframe),那么接下来的这两个函数则是应用于二维dataframe。

04 groupby

groupby,顾名思义,是用于实现分组聚合统计的函数,与SQL中的group by逻辑类似。例如想统计前面成绩表中各门课的平均分,语句如下:

当然,groupby的强大之处在于,分组依据的字段可以不只一列。例如想统计各班每门课程的平均分,语句如下:

不只是分组依据可以用多列,聚合函数也可以是多个。例如想同时统计各班每门课程的选修人数和平均分,语句如下:

普通聚合函数mean和agg的用法区别是,前者适用于单一的聚合需求,例如对所有列求均值或对所有列求和等;而后者适用于差异化需求,例如A列求和、B列求最值、C列求均值等等。

另外,groupby的分组字段和聚合函数都还存在很多其他用法:分组依据可以是一个传入的序列(例如某个字段的一种变形),聚合函数agg内部的写法还有列表和元组等多种不同实现。例如,这里想以学生姓氏进行分组统计课程平均分,语句如下:

05 pivot_table

pivot_table是pandas中用于实现数据透视表功能的函数,与Excel中相关用法如出一辙。

何为数据透视表?数据透视表本质上仍然数据分组聚合的一种,只不过是以其中一列的唯一值结果作为行、另一列的唯一值结果作为列,然后对其中任意(行,列)取值坐标下的所有数值进行聚合统计,就好似完成了数据透视一般。

pivot_table函数参数列表如下:

在以上参数中,最重要的有4个:

  • values:用于透视统计的对象列名
  • index:透视后的行索引所在列名
  • columns:透视后的列索引所在列名
  • aggfunc:透视后的聚合函数,默认是求均值

这里仍然以求各班每门课程的平均分为例,则应用pivot_table实现此功能的语句为:

aggfunc默认是求均值函数'mean'

作为对比,再次给出用groupby实现相同功能的结果:

分组后如不加['成绩']则也可返回dataframe结果

从结果可以发现,与用groupby进行分组统计的结果很是相近,不同的是groupby返回对象是2个维度,而pivot_table返回数据格式则更像是包含3个维度。

既然二者如此相似,那么是否可以实现相互转换呢?答案是肯定的!

06 stack 和 unstack

stack和unstack可以实现在如上两种数据结果中相互变换。从名字上直观理解:

  • stack用于堆栈,所以是将3维数据堆成2维
  • unstack用于解堆,所以可将2维数据解堆成3维

直接以前述分析结果为例,对pivot_table数据透视结果进行stack,结果如下:

pivot_table+stack=groupby

类似地,对groupby分组聚合结果进行unstack,结果如下:

groupby+unstack=pivot_table

看到这里,会不会有种顿悟的感觉:麻雀虽小,玩转的却是整个天空;pandas接口有限,阐释的却有道家思想:一生二、二生三、三生万物……

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

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

原始发表时间:2020-05-27

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

我来说两句

0 条评论
登录 后参与评论

相关文章

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

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

    luanhz
  • 地图可视化不只是pyecharts.map

    导读:地图可视化是一种非常直观的数据分析结果展现形式,python有很多可视化库可以实现,pyecharts就是很多python爱好者喜爱的实现地图可视化方法之...

    luanhz
  • 递归+回溯求解数独问题

    导读:回溯是常用的算法理论之一,很多规模较大、直接分析较为复杂的问题都可以考虑用回溯求解,例如N皇后问题、骑士周游和走迷宫问题等。本质上,回溯问题是一种优化后的...

    luanhz
  • 虚拟机VirtualBox-5.1安装

    VirtualBox 是一款开源虚拟机软件。VirtualBox 是由德国 Innotek 公司开发,由Sun Microsystems公司出品的软件,使用Qt...

    申霖
  • win10 UWP 标题栏后退

    在win平板,可以有后退键,手机也有,但是手机的是物理的,平板的和 PC 的后退是在标题栏做的

    林德熙
  • 2018-11-07 史上最全Vim快捷键键位图 -- 入门到进阶史上最全Vim快捷键键位图 -- 入门到进阶

    本文所有键位图虽然都不是博主原创,但是所有资源均为博主亲自收集整理。如需全文转载,希望尊重原作者和博主的劳动成果,保留原文链接。 本文所有图片为了方便读者使用均...

    Albert陈凯
  • CB Insights:2019年2季度全球金融科技发展报告

    点滴科技资讯
  • 附近的人位置距离计算方法

    附近的人的位置用经纬度表示,然后通过两点的经纬度计算距离。根据网上的推荐,最终采用geohash。 geohash的实现java版: 1 import ja...

    Ryan-Miao
  • 大数据应用之HBase数据插入性能优化之多线程并行插入测试案例

      上篇文章提起关于HBase插入性能优化设计到的五个参数,从参数配置的角度给大家提供了一个性能测试环境的实验代码。根据网友的反馈,基于单线程的模式实现的数据插...

    数据饕餮
  • mysql常用命令

    由于种种原因,最近准备换PHP的系统,研究一下DEDE和DISCUZ,结果发现环境很难搭建,最后找了个EXP,才终于搭建成功。装了个MYSQL,结果发现没有图形...

    Tony老师

扫码关注云+社区

领取腾讯云代金券