让我们继续pandas的系列教程!这是第二集,**我将介绍pandas的聚合方法--如count()
,sum()
,min()
,max()
等--和pandas的groupby()
函数。**这些都是数据科学项目中非常常用的方法,所以如果你是一个有抱负的数据科学家,一定要把这篇文章中的每一个细节都看一遍......因为你可能每天都会在现实生活的项目中用到这些。
注1:这是一个实践教程,所以我建议和我一起做编码的部分
在我们开始之前
如果你还没有这么做,我建议先看看这些文章。
- 如何安装Python、R、SQL和bash来练习数据科学
- 数据科学的Python - 基础知识#1 - 变量和基本操作
- Python导入语句和最重要的内置模块
- 数据科学家的五大Python库和包
- Pandas教程1:Pandas基础知识(读取数据文件、数据框架、数据选择)
/*! elementor - v3.6.5 - 27-04-2022 */ .elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-head .elementor-heading-title[class*=elementor-size-]>a{color:herit;font-size:herit;line-height:herit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading.elementor-heading-title.elementor-size-xxl{font-size:59px}
如何成为一名数据科学家
(Tomi Mester的50分钟免费视频课程)
/*! elementor - v3.6.5 - 27-04-2022 */ .elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#818a91;color:#fff}.elementor-widget-text-editor。elementor-drop-cap-view-framed .elementor-drop-cap{color:#818a91;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) 。elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor.elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}。
只需在这里订阅Data36新闻通讯(免费)!
/*! elementor-pro - v3.7.1 - 16-05-2022 */ .elementor-button.elementor-hidden,.elementor-hidden{display:none}.e-form__step{width:100%}.e-form__step:not( .elementor-hidden){显示:-webkit-box;显示:-ms-flexbox;显示:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.e-form__buttons{-ms-flex-wrap:wrap;flex-wrap:wrap}.e-form__buttons,.e-form__buttons__wrapper{显示:-webkit-box;显示:-ms-flexbox;显示:flex}.e-form__indicators{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-wrap:nowrap;flex-wrap:nowrap;font-size:13px;margin-bottom:var(-e-form-steps-indicators-spacing)}.e-form__indicators,.e-form__indicators__indicator{显示:-webkit-box;显示:-ms-flexbox;显示:flex;-webkit-box-align:center;-ms-flex-align:center;对齐-项目:center}.e-form__indicators__indicator{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-ms-flex-preferred-size:0;flex-base:0; padding:0 var(-e-form-steps-divider-gap) }.e-form__indicators__indicator__progress{width:100%;position:relative;background-color:var(--e-form-steps-indicator-progress-background-color); border-radius:var(--e-form-steps-indicator-progress-border-radius); overflow:hidden}.e-form__indicators__indicator__progress__meter{width:var(--e-form-steps-indicator-progress-meter-width,0);height:var(--e-form-steps-indicator-progress-height);line-height:var(-e-form-steps-indicator-progress-height);padding-right:15px;border-radius:var(--e-form-steps-indicator-progress-border-radius);background-color:var(--e-form-steps-indicator-progress-color);color:var(-e-form-steps-indicator-progress-meter-color);text-align:right;-webkit-transition:width .1s linear;-o-transition:width .1s linear;transition:width .1s linear}.e-form__indicators__indicator:first-child{padding-left:0}.e-form__indicators__indicator:last-child{padding-right:0}。e-form__indicators__indicator--state-inactive{color:var(-e-form-steps-indicator-inactive-primary-color,#c2cbd2)}.e-form__indicators__indicator--state-inactive [class*=indicator--shape-] :not(.e-form__indicators__indicator--shape--none){background-color:var(-e-form-steps-indicator--active-secondary-color,#fff)}.e-form__indicators__indicator--state-active object, .e-form__indicators__indicator--state-active svg{fill:var(-e-form-steps-indicator--active-primary-color,#c2cbd2)}。e-form__indicators__indicator--state-active{color:var(--e-form-steps-indicator-active-primary-color,#39b54a); border-color:var(--e-form-steps-indicator-active-secondary-color,#fff)}.e-form__indicators__indicator--state-active [class*=indicator--shape]:not(.e-form__indicators__indicator--shape-none){background-color:var(--form-steps-indicator-active-secondary-color,#fff)}.e-form__indicators__indicator--state-active object,.e-form__indicators__indicator--state-active svg{fill:var(-e-form-steps-indicator-active-primary-color,#39b54a)}.e-form__indicators__indicator--state-completed{color:var(-e-form-step-indicator-completed-secondary-color,#fff)}.e-form__indicators__indicator--state-completed [class*=indicator--shape-] :not(.e-form__indicators__indicator--shape--none){background-color:var(--e-form-step-indicator--completed-primary-color,#39b54a)}.e-form__indicators__indicator--state-completed .e-form__indicators__indicator__label{color:var(--e-form-step-indicator-completed-primary-color,#39b54a)}.e-form__indicators__indicator--state-completed .e-form__indicators__indicator--shape-none{color:var(-e-form-steps-indicator-completed-primary-color,#39b54a); background-color:initial}.e-form__indicators__indicator--state-completed object,.e-form__indicators__indicator--state-completed svg{fill:var(-e-form-steps-indicator-completed-secondary-color,#fff)}.e-form__indicators__indicator__icon{width:var(--e-form-steps-indicator-padding,30px);height:var(--e-form-steps-indicator-padding,30px);font-size:var(-e-form-steps-indicator-size);border-width:1px;border-style:solid;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align;-ms-flex-align;align-items:center;overflow:hidden;margin-bottom:10px}.e-form__indicators__indicator__icon img,.e-form__indicators__indicator__icon object,.e-form__indicators__indicator__icon svg{width:var(-e-form-steps-indicator-icon-size);height:auto}.e-form__indicators__indicator__icon .e-font-icon-svg{height:1em}。e-form__indicators__indicator__number{width:var(--e-form-steps-indicator-padding,30px);height:var(--e-form-steps-indicator-padding,30px); border-width:1px; border-style:solid; display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align;-ms-flex-align;align-items:center;margin-bottom:10px}.e-form__indicators__indicator--shape-circle{border-radius:50%}.e-form__indicators__indicator--shape-square{border-radius:0}.e-form__indicators__indicator--shape-rounded{border-radius:5px}.e-form__indicators__indicator--shape-none{border:0}。e-form__indicators__indicator__label{text-align:center}.e-form__indicators__indicator__separator{width:100%;height:var(-e-form-steps-divider-width);background-color:#c2cbd2}.e-form__indicators--type-icon, .e-form__indicators--type-icon_text, .e-form__indicators--type-number, .e-form__indicators--type-number_text{-webkit-box-align:start;-ms-flex-align:start; align-items:flex-start}.e-form__indicators--type-icon .e-form__indicators--type-icon .e-form__indicators__indicator__separator,.e-form__indicators--type-number .e-form__indicators__indicator__separator,.e-form__indicators--type-number_text .e-form__indicators__indicator__separator{margin-top:calc(var(--e-form-steps-indicator-padding, 30px) / 2 - var(--e-form-steps-divider-width, 1px) / 2)}。elementor-field-type-html{display:inline-block}.elementor-login .elementor-lost-password, .elementor-login .elementor-remember-me{font-size:.85em}.elementor-field-type-recaptcha_v3 .elementor-field-label{display:none}.elementor-field-type-recaptcha_v3 .grecaptcha-badge{z-index:1}.elementor-button .elementor-form-spinner{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.elementor-form .elementor-button>span{显示:-webkit-box;显示:-ms-flexbox;显示:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align;align-items:center}.elementor-form.elementor-button .elementor-button-text{white-space:normal;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.elementor-form .elementor-button svg{height:auto}.elementor-form .e-fon-icon-svg{height:1em}。
我接受Data36的隐私政策。(没有垃圾邮件。只有有用的数据科学相关内容。当你订阅后,我将每周给你发几封邮件,让你了解最新的信息。你会得到文章、课程、小抄、教程和许多很酷的东西)。
现在就获得访问权!
聚合--在理论上
聚合是将一个数据集(或其子集)的值变成一个单一值的过程。让我把这一点说清楚吧!如果你有一个pandas DataFrame,比如...
动物 | 水_需求 |
斑马 | 100 |
狮子 | 350 |
大象 | 670 |
袋鼠 | 200 |
...那么一个简单的汇总方法就是计算water_need
的数值之和,也就是100 + 350 + 670 + 200 = 1320
。或者另一种聚合方法是计算 animal
栏中的数值的数量,也就是4
。理论并不复杂,对吗?
那么让我们看看其他的实践吧!
Pandas 聚合方法(实践中)
我们上次是在哪里结束的?我们打开了一个Jupyter笔记本,导入了pandas
和numpy
,并加载了两个数据集:zoo.csv
和article_reads
。我们将从这里继续下去--所以如果你不知道我刚才在前一句中讲了什么,请移步到这篇文章:pandas教程--第一集!
如果你已经熟悉了基础知识,为了方便起见,这里是我们将再次使用的数据集。
zoo
dataset:46.101.230.157/datacoding101/zoo.csvarticle_reads
数据集。46.101.230.157/dilan/pandas_tutorial_read.csv
准备好了吗?很好!
让我们开始使用我们的zoo
数据集!(如果你想再次下载它,你可以在这个链接中找到它。)我们已经通过使用加载它。
pd.read_csv('zoo.csv', delimiter = ',')
让我们把这个数据帧存储到一个叫做zoo
的变量中。
zoo = pd.read_csv('zoo.csv', delimiter = ',')
为了学习基本的pandas聚合方法,让我们对这个数据做五件事。
- 让我们计算一下
zoo
中的行数(动物的数量) ! - 让我们计算一下这些动物的总数
water_need
! - 让我们找出哪个是最小的
water_need
值! - 然后是最大的
water_need
值! - 并最终得出平均
water_need
!
注意:一开始,我们不会使用groupby()
方法,但别担心,当我们学习了基础知识后,我会回到这个问题上。
#1 pandas count()
最基本的聚合方法是计数。要计算动物的数量,就像在整个zoo
数据框上应用count pandas函数一样简单。
zoo.count()
这很有趣。"这些线是什么?"--你可能会问...
实际上,pandas.count()
函数对每一列中的数值进行计数。在zoo
数据集的情况下,有3列,每列有22个值。
如果你想让你的输出更加清晰,你可以通过使用一个选择操作符(我们在之前的文章中了解到的)先选择animal
列。像这样。
zoo[['animal']].count()
或者在这种特殊情况下,如果你使用这种语法,结果会更漂亮。
zoo.animal.count()
这也是只选择一列,但它把我们的pandas数据框架对象变成了pandas系列对象。而计数函数将被应用于此。(这意味着输出的格式略有不同)。
#2 pandas中的sum()
按照同样的逻辑,你可以通过打字轻松地对water_need
列中的数值进行求和。
zoo.water_need.sum()
出于好奇,让我们也在所有列上运行我们的.sum()
函数。
zoo.sum()
注意:我喜欢.sum()
,把animal
列的字变成一串动物名称。(顺便说一下,这非常符合Python的逻辑。)
Pandas数据聚合#3和#4:min()和max()
如何使pandas从water_need
列中返回最小的值?
我打赌你已经明白了。
zoo.water_need.min()
而获得最大值的方法也很类似。
zoo.water_need.max()
#5: pandas中的平均数:mean()和median()
最后,让我们来计算统计学上的平均数,比如平均数和中位数!
语法与上面的其他聚合方法相同。
zoo.water_need.mean()
zoo.water_need.median()
好了,这很容易,对吗?比如说,Pandas的聚合方法比SQL的要简单得多、多。
所以,现在是时候给它加点料了--用一点分组的方法!介绍一下groupby()
函数!
初级数据科学家的第一个月
一个100%实用的在线课程。一个为期6周的模拟在真实生活中的创业公司担任初级数据科学家的课程。
"解决真正的问题,获得真正的经验--就像在真正的数据科学工作中一样"。
了解更多...
pandas groupby()函数(又名:pandas中的分组)
作为一个数据科学家,你可能会经常做一些细分。例如,知道所有动物的平均数water_need
(我们刚刚知道是347.72
),这很好。但很多时候,把这个数字按动物类型来划分--比方说--更具有可操作性。有了这个,我们就可以把各个物种相互比较。 (狮子或斑马喝得更多吗?)或者我们可以找到异常值!(大象喝得多!)(大象喝得多!)。
这里有一个简单的视觉效果,显示了pandas是如何进行 "分割 "的--用groupby
和聚合。
它只是将相似的数值分组,并为每组计算给定的聚合值*(在上面的例子中,它是一个平均值)*。
Pandas groupby() - 实践中
让我们在我们的zoo
DataFrame上真实地进行上述的分组和聚合。
我们必须在我们的zoo
变量和我们的.mean()
函数之间插入一个groupby
关键字。
zoo.groupby('animal').mean()
就像以前一样,pandas自动为每一列运行.mean()
计算(animal
列消失了,因为那是我们分组的列)。你可以忽略uniq_id
列,也可以在事后通过使用这些语法之一来删除它。
zoo.groupby('animal').mean()[['water_need']]
-" 这将返回一个DataFrame对象。
zoo.groupby('animal').mean().water_need
-" 这将返回一个系列对象。
很明显,你可以把聚合方法从.mean()
改成任何东西,我们在上面学到的!
让我们再看一个例子,结合pandasgroupby
和count
!
Pandas groupby() 和 count()
我只是想加入这个例子,因为这是你发现一个新数据集时最常见的操作。将count
和groupby
一起使用,就像前面的例子一样简单。
只要键入这个。
zoo.groupby('animal').count()
就会神奇地将不同的动物按熊猫来计算。
好了!现在你知道了一切,你必须知道!
现在是时候...
测试自己#1(另一个计数+分组的挑战)
让我们回到我们的article_read
数据集。
(注意:记住,这个数据集保存的是一个旅游博客的数据。如果你还没有这些数据,你可以从这里下载。或者你可以通过阅读这个pandas教程的上一集来逐步完成整个下载--开放存储的过程)。
如果你已经准备好了一切,这里是我的第一个任务。
article_read
数据框中最频繁的来源是什么?
..
.
而答案是Reddit!
我是怎么得到它的?使用这个代码。
article_read.groupby('source').count()
我将为你分解。
- 采取
article_read
数据集! - 使用
groupby()
,并通过source
列的值创建分段! - 并最终通过在
groupby()
部分之后使用.count()
来计算每个组中的值。
你可以--选择性地--删除不必要的列,只保留user_id
列,像这样。
article_read.groupby('source').count()[['user_id']]
测试自己 #2
这里是另一个稍微复杂的挑战。
对于country_2
的用户,最频繁的topic
和source
组合是什么?或者换句话说:哪个topic
,来自哪个source
,带来了最多的来自country_2
的浏览?
..
.
结果是**Reddit(来源)和Asia(主题)的组合,有139次阅读!**而Python代码得到了这个结果。
而得到这个结果的Python代码是。
article_read[article_read.country == 'country_2'].groupby(['source', 'topic']).count()
这里有一个简单的解释。
- 首先,我们过滤了
country_2
的用户,其中有article_read[article_read.country == 'country_2']
- 然后在这个子集上,我们应用了
groupby
pandas方法......哦,我有没有提到你可以按多列分组?现在你也知道了吧!(从语法上讲,要注意一件事:你必须把列的名称放到一个列表中。这就是为什么大括号的框架要放在小括号之间的原因)。(那是
groupby(['source', 'topic'])
。) - 而按照惯例:
count()
函数是拼图的最后一块。
结论 (pandas groupby, count, sum, min, max, etc.)
这是我的pandas教程系列的第二集。现在你看到聚合和分组在pandas中并不难......相信我,你会经常用到它们的
注意:如果你以前使用过SQL,我鼓励你休息一下,比较一下pandas和SQL的聚合方法。有了这个,你就会更加了解这两种语言之间的关键区别了
在下一篇文章中,我将向你展示四个最常用的pandas数据处理方法。merge
,sort
,reset_index
和fillna
。请继续关注我:Pandas教程,第三集
- 如果你想了解更多关于如何成为一名数据科学家,请参加我的50分钟的视频课程。如何成为一名数据科学家。(它是免费的!)
- 也可以看看我为期6周的在线课程。初级数据科学家的第一个月》视频课程。
干杯。
托米-梅斯特
PS.关于详细的指南,请查看pandas的官方指南(它非常更新--最后一次更新是在2022年),这里。
The postPandas groupby(), count(), sum() and Other Aggregation Methods (Pandas Tutorial 2.)appeared first onData36.