pandas filter_数据科学|pandas教程——分组和聚合

ef40856c904548278f948cef39c4bb42

『运筹OR帷幄』原创

作者:周岩 王转转

编者按

_

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

_

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

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

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

1.建立数据

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

f67b040b38594515b73f338f742e66c6

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

e5df74adfe5647acafbb2c829b4d86ed

2.分组

2.1 groupby函数说明

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

81aa1ac35378400c9266e814a2b0c6b4

2.2 一个简单的分组

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

8c2b61279c954c0fb1ae42a4d2e56961
d8ec09a3880642a9b80c20f5dc30c5cf

2.3 分组后的运算

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

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

fe081eb1a02a49738f41d70e6838b4b0
b605c75568c0404dac460c25054b4e49
db9451c4f7cc4e35a1b0615659ce2ff3

2.4 多重分组方法

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

c17297d744b140509d2cb0c834038956
bf0a32b3f1af45b08e30ee7eca973468
162086668a8f49148d4ba1b55d7010dc

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

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

b170b623b84542348820d4fc403436d3
3dafc230ed7c47abb58bd370e2c16065

2.6 利用索引分组

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

5fc1583335b64ce696cfdc084a722070
c9b8066c12d141e5beffef80e3119484

3.聚合

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

3.1 利用agg进行简单的聚合

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

f0d89b00a335449f816ada86304a1027

3.2 transform函数

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

0a0a24887a48447a9c5b02401125d857

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

ee848fb70c564bbd82bdb05ccf91ec2a
b9f08383bbb24319a48516889000e81c
003fc24ca32040caa2fcb49c5f203925

3.3 rolling和expanding方法

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

ccb50c61f08f466a8b9b75c2606a362e

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

6f6debb71408425c8057fad78df139dd

3.4 filter函数

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

b33e4dde0d9c45e1956c6fbc9db30a50

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

dcbd10eaacd444e68fd42e413f9261c3
4dad9f03ed494f219518189ba7c28d29

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

1f323945fdce4461b2db1e3a9222afc4
cd8c1c8fa8144f509fafac0b8a5d5b07

4.最后总结

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

参考文献:

1. pandas toolkit

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程概述教会学员快速学会python数据分析,覆盖python基础,pandas,seaborn,matplotlib,SQL,sqlite,lambda等知识。课程是数据科学家居家必备的军火库。课程定期更新,大部分视频分辨率支持2K超清,学员可以看清每一行代码。 适合人群python数据科学从业人员,数据分析师,统计 学习计划和方法1.每天保证1-2个小时学习时间,预计7-15天左右可以学习完整门课程(不同基础学生时间差异较大)。2.每节课的代码实操要保证,建议不要直接复制粘贴代码,自己实操一遍代码对大脑记忆很重要,有利于巩固知识。3.第二次学习时要总结上一节课内容,必要时做好笔记,加深大脑理解。4.不懂问题要罗出来,先自己上网查询,查不到的可以咨询老师。 作者介绍Toby,持牌照金融公司担任模型验证专家,国内最大医药数据中心数据挖掘部门负责人!和清华大学出版社,重庆儿科医院,中科院教授,赛柏蓝保持慢病数据挖掘项目合作!管理过欧美日中印巴西等国外药典数据库,马丁代尔数据库,FDA溶解度数据库,临床试验数据库,WHO药物预警等数据库。原创公众号(python风控模型) 课程概述教会学员快速学会python数据分析,覆盖python基础,pandas,seaborn,matplotlib,SQL,sqlite,lambda等知识。课程是数据科学家居家必备的军火库。课程定期更新,大部分视频分辨率支持2K超清,学员可以看清每一行代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值