作者:周岩 王转转

编者按

在对数据处理的过程中,除了前期对数据的清洗,更多的工作是需要根据不同的分析需求对数据进行整合。比如需要统计某类数据的出现次数,或者需要按照不同级别来分别统计等等。为满足这些需求,比较常用的方法即分组和聚合。幸运的是,pandas中完美支持了这样的功能,掌握好pandas中这些功能,可以使数据处理的效率大大提高。这篇文章就通过一些基础而又十分扎实的例子带大家一起学习一下这些方法。

数据的分组与聚合是关系型数据库中比较常见术语。使用数据库时,我们利用查询操作对各列或各行中的数据进行分组,可以针对其中的每一组数据进行各种不同的操作。

pandas的DataFrame数据结构也为我们提供了类似的功能,可以非常方便地对DataFrame进行变换。我们可以把生成的数据保存到python字典中,然后利用这些数据来创建一个python DataFrame,下面就开始练习pandans提供的聚合功能吧。

为了更直观的展示代码,我们用先代码后输出(截图)的方式呈现,每个部分为一个小节,方便大家查询。另外强烈建议各位下载代码运行,以便更好理解pandas的用法哦。(代码在后台回复关键字‘pandas教程及代码’获得,或者访问kaggle网站:https://www.kaggle.com/wendywzww/pandas)

1.建立数据

首先我们建立一个虚拟的数据。为了适应后续的实例,这里数据建立的稍微复杂一些。数据中除了比较正常的数据列以外,增加了建立双index的方法,同时数据中也特别地建立了一个日期列。建立数据的相关代码如下:

简单展示一下我们的数据:

2.分组

2.1 groupby函数说明

分组功能主要利用pandas的groupby函数。虽然分组功能用其他函数也可以完成,但是groupby函数是相对来说比较方便的。这个函数有很多神奇的功能,熟练后功能十分强大。groupby函数的官方参数说明如下:

2.2 一个简单的分组

我们首先进行简单分组,将创建的DataFrame实例data_df根据size进行分组,得到group_1。在这里我们将group_1转换成list类型后输出,代码如下:

2.3 分组后的运算

在取得group_1分组后,对group_1进行分组运算(如sum),并对属性名称添加前缀sum_。

(注意:这里非数值数据则不会进行分组运算)

2.4 多重分组方法

pandas不仅可以按照单标签进行分组,还支持多重分组,这里我们将data_df根据size和color两个列标签进行多重分组,得到group_2:

2.5 利用预先设定的函数进行分组

此外,还可以利用函数进行分组,同时可以令groupby函数中的参数axis=1对列进行分组(axis=0对行进行分组)。用函数分组更加灵活,可以制定一些比较特殊的规则,比如下面例子中,我们就是将列名带有feature的划分为一组,其他的划分为另一组:

2.6 利用索引分组

分组对象除了列标签之外,还可以用索引进行分组。我们用不同level值来区分多重索引,其中0代表class,1代表country,这里也可以用索引的level进行分组(可以是一个list)。

3.聚合

所谓聚合就是在对数据进行合理分组后,再根据需要对数据进行的一列操作,比如求和、转换等。聚合函数通常是数据处理的最终目的,数据分组很多情况下也是为更好聚合来服务的。

3.1 利用agg进行简单的聚合

当groupby对象被建立后,我们也可以用agg函数对分组后的数据进行计算。下例中计算了group_2中feature_1的最大值和feature_2的均值。

3.2 transform函数

接下来我们使用transform函数对groupby对象进行变换,transform的计算结果和原始数据的形状保持一致。下例中我们自定义了函数data_range来获得根据size分组后各个值的范围。

另外我们还常常通过transform函数将缺失值替换为组间平均值。

3.3 rolling和expanding方法

根据列标签color进行分组后对列标签feature_1使用rolling方法,滚动计算最新三个值的平均值。这可能不太容易理解,这个rolling函数相当于定一个窗口(这里设为3),pandas从数据的第一列向前寻找最近的3个数据进行操作(这里是求平均),如果没有足够则返回NaN。rolling函数的具体用法可以查询官网。

expanding函数相对rolling方法而言,不是固定的窗口而是扩展窗口,因此会对给定的操作进行叠加。如下例中的sum方法,其中的数值是不断叠加扩大的,也就是说窗口从3一直增加,rolling方法则是一直保持窗口大小为3不变。

3.4 filter函数

filter函数的参数是作用于整个组,返回值为True或False的函数。我们可以利用filter函数得到分组后的某些特定组别,如下例中元素数大于 3 的分组。

有些分组数据用transform和aggregate都很难完成处理,这时候我们需要使用apply函数。在apply中可使用自定义函数,因此apply相较前两者更加灵活。例如如下代码输出feature_1的数据描述:

又例如这里将每组的feature_1的数据进行提取运算,并变成了列数据original和demeaned。

4.最后总结

关于pandas分组与聚合方法的例子就暂时介绍这些,其实还有很多更具体和实用的用法,可以在具体的应用中逐步探索,如果各位有更好的应用例子也欢迎留言分享哦。

参考文献:

1. pandas toolkit

2. https://cloud.tencent.com/developer/article/1193823

输出分组_数据科学|pandas教程--分组和聚合相关推荐

  1. csv导入pgsql不成功_数据科学 | pandas数据导入与导出

    ↑↑↑↑↑点击上方蓝色字关注我们! 『运筹OR帷幄』原创 作者:杨士锦 周岩 书生 编者按 当我们开始着手做一个数据分析项目时,选择和导入数据集是第一个步骤,而导出数据虽然非必需,但有时候我们也需要保 ...

  2. c++输出方块_数据科学 | OpenCV方块体识别解决方案

    ↑↑↑↑↑点击上方蓝色字关注我们! 『运筹OR帷幄』原创 作者:彭贯军 彭贯军,智能制造工业检测图像算法工程师,研究方向:IC芯片机器视觉检测技术.运营公众号:土盐. 编者按: 通过一个生动的魔方案例 ...

  3. Python 数据科学入门教程:机器学习:回归

    Python 数据科学入门教程:机器学习:回归 原文:Regression - Intro and Data 译者:飞龙 协议:CC BY-NC-SA 4.0 引言和数据 欢迎阅读 Python 机器 ...

  4. python数据科学入门_干货!小白入门Python数据科学全教程

    前言本文讲解了从零开始学习Python数据科学的全过程,涵盖各种工具和方法 你将会学习到如何使用python做基本的数据分析 你还可以了解机器学习算法的原理和使用 说明 先说一段题外话.我是一名数据工 ...

  5. 数据科学 IPython 笔记本 7.11 聚合和分组

    7.11 聚合和分组 原文:Aggregation and Grouping 译者:飞龙 协议:CC BY-NC-SA 4.0 本节是<Python 数据科学手册>(Python Data ...

  6. python3 array为什么不能放不同类型的数据_小白入门Python数据科学全教程lt;一gt;...

    前言 本文讲解了从零开始学习Python数据科学的全过程,涵盖各种工具和方法 你将会学习到如何使用python做基本的数据分析 你还可以了解机器学习算法的原理和使用 说明 先说一段题外话.我是一名数据 ...

  7. 2019b官方手册中文版_数据科学|「最全」实至名归,NumPy 官方早有中文教程,结合深度学习,还有防脱发指南...

    文章须知 文章作者:机器之心 责任编辑:书生 审核编辑:阿春 微信编辑:玖蓁 本文转载自公众号 机器之心 (ID:almosthuman2014) 原文链接:「最全」实至名归,NumPy 官方早有中文 ...

  8. 字段缺失_数据科学| 手把手教你用 pandas 索引、汇总、处理缺失数据

    作者:Paul 编者按: pandas提供了很多常用的数学和统计方法,本文中将用十分详细的例子来具体进行介绍:另外在许多数据分析工作中,缺失数据是经常发生的,将会具体介绍如何处理缺失数据.本文十分详细 ...

  9. mysql分组排列的查询语句_数据的排序与分组语句_MySQL

    bitsCN.com 数据的排序与分组语句 使用SQL语句执行查询操作时,我们可能发现查询出的数据结果的排序是无序的.为了更好的观察数据表中的查询结果,开发人员或者用户经常要对查询的数据进行排序操作, ...

  10. 数据库面试复习_数据科学面试复习

    数据库面试复习 大面试前先刷新 (REFRESH BEFORE THE BIG INTERVIEW) 介绍 (Introduction) I crafted this study guide from ...

最新文章

  1. span 可编辑 控制数量_CSS如何限制显示的文本字数
  2. 苹果系统里面 dictionary 如何加入中文词典
  3. idea servlet自动配置web.xml_Spring Boot学习04_嵌入式Servlet容器自动配置原理
  4. 石墨烯区块链(5)智能合约
  5. python标准库math用来计算平方根的函数_《Python程序设计方案》题库
  6. Google的三篇大数据思想论文
  7. linux-basic(9)文件与文件系统的压缩与打包
  8. FastReport问题整理(转)
  9. 使用python做最简单的爬虫
  10. 漫画 | Kubernetes带你一帆风顺去远航
  11. 如何提高go代码覆盖率_如何通过静态分析提高iOS代码质量
  12. utilities(C/C++)(二)
  13. Atitit 得到mybatis 实际 sql 1.1. 使用mybatis工具提供的,只能出现问号一大堆不行 1 1.2. 配置log 打印sql依然不行,里面有问号。。 4 1.3. 配置p
  14. jracdrive变频器说明书580_ABB变频器ACS580说明书.pdf
  15. 手机app测试用例怎么写?手机app测试点有哪些?只有干货没有水分,错过绝对后悔!
  16. IBM X3550 m4 微码升级
  17. 思科交换机:基本命令(上)
  18. Oracle中的PLsql的符号解释大全
  19. 从零开始学_JavaScript_系列(六)——CSS的padding、margin、border属性超详细解释(图文)
  20. 免费网盘如何选择@2020年

热门文章

  1. java里面的内存机制_Stack vs. Heap:了解 Java 的内存分配机制
  2. Sql 查询库、表、列名的语句
  3. iOS NSURLSession 指南
  4. Threading模块
  5. Linux下如何实现对某个文件夹进行压缩
  6. Shell脚本 小程序演示
  7. 在Sqlite中通过Replace来实现插入和更新
  8. C#WINFORM控件之ComboBox
  9. 面试题之请描述一下Java类加载过程
  10. concurrentHashMap扩容细节