Pandas groupby(), count(), sum()和其他聚合方法(Pandas教程2.)

219 阅读13分钟

让我们继续pandas的系列教程!这是第二集,**我将介绍pandas的聚合方法--如count(),sum(),min(),max() 等--和pandas的groupby() 函数。**这些都是数据科学项目中非常常用的方法,所以如果你是一个有抱负的数据科学家,一定要把这篇文章中的每一个细节都看一遍......因为你可能每天都会在现实生活的项目中用到这些。

注1:这是一个实践教程,所以我建议和我一起做编码的部分

在我们开始之前

如果你还没有这么做,我建议先看看这些文章。

  1. 如何安装Python、R、SQL和bash来练习数据科学
  2. 数据科学的Python - 基础知识#1 - 变量和基本操作
  3. Python导入语句和最重要的内置模块
  4. 数据科学家的五大Python库和包
  5. 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笔记本,导入了pandasnumpy ,并加载了两个数据集:zoo.csvarticle_reads 。我们将从这里继续下去--所以如果你不知道我刚才在前一句中讲了什么,请移步到这篇文章:pandas教程--第一集!

如果你已经熟悉了基础知识,为了方便起见,这里是我们将再次使用的数据集。

准备好了吗?很好!

让我们开始使用我们的zoo 数据集!(如果你想再次下载它,你可以在这个链接中找到它。)我们已经通过使用加载它。

pd.read_csv('zoo.csv', delimiter = ',')

pd read_csv example again zoo

让我们把这个数据帧存储到一个叫做zoo 的变量中。

zoo = pd.read_csv('zoo.csv', delimiter = ',')

pandas aggregation zoo read_csv

为了学习基本的pandas聚合方法,让我们对这个数据做五件事。

  1. 让我们计算一下zoo 中的行数(动物的数量) !
  2. 让我们计算一下这些动物的总数water_need!
  3. 让我们找出哪个是最小的water_need 值!
  4. 然后是最大的water_need 值!
  5. 并最终得出平均water_need!

注意:一开始,我们不会使用groupby() 方法,但别担心,当我们学习了基础知识后,我会回到这个问题上。

#1 pandas count()

最基本的聚合方法是计数。要计算动物的数量,就像在整个zoo 数据框上应用count pandas函数一样简单。

zoo.count()

pandas count example

这很有趣。"这些线是什么?"--你可能会问...

实际上,pandas.count() 函数对每一列中的数值进行计数。在zoo 数据集的情况下,有3列,每列有22个值。

如果你想让你的输出更加清晰,你可以通过使用一个选择操作符(我们在之前的文章中了解到的)先选择animal 列。像这样。

zoo[['animal']].count()

pandas aggregation count column

或者在这种特殊情况下,如果你使用这种语法,结果会更漂亮。

zoo.animal.count()

这也是只选择一列,但它把我们的pandas数据框架对象变成了pandas系列对象。而计数函数将被应用于此。(这意味着输出的格式略有不同)。

pandas count

#2 pandas中的sum()

按照同样的逻辑,你可以通过打字轻松地对water_need 列中的数值进行求和。

zoo.water_need.sum()

pandas sum

出于好奇,让我们也在所有列上运行我们的.sum() 函数。

zoo.sum()

pandas sum

注意:我喜欢.sum() ,把animal 列的字变成一串动物名称。(顺便说一下,这非常符合Python的逻辑。)

Pandas数据聚合#3和#4:min()和max()

如何使pandas从water_need 列中返回最小的值?

我打赌你已经明白了。

zoo.water_need.min()

pandas aggregation min

而获得最大值的方法也很类似。

zoo.water_need.max()

pandas aggregation max

#5: pandas中的平均数:mean()和median()

最后,让我们来计算统计学上的平均数,比如平均数和中位数!

语法与上面的其他聚合方法相同。

zoo.water_need.mean()

pandas aggregation mean

zoo.water_need.median()

pandas aggregation median

好了,这很容易,对吗?比如说,Pandas的聚合方法比SQL的要简单得多、多。

所以,现在是时候给它加点料了--用一点分组的方法!介绍一下groupby() 函数!

初级数据科学家的第一个月

一个100%实用的在线课程。一个为期6周的模拟在真实生活中的创业公司担任初级数据科学家的课程。

"解决真正的问题,获得真正的经验--就像在真正的数据科学工作中一样"。

了解更多...

pandas groupby()函数(又名:pandas中的分组)

作为一个数据科学家,你可能会经常做一些细分。例如,知道所有动物的平均数water_need (我们刚刚知道是347.72 ),这很好。但很多时候,把这个数字按动物类型来划分--比方说--更具有可操作性。有了这个,我们就可以把各个物种相互比较。 (狮子或斑马喝得更多吗?)或者我们可以找到异常值!(大象喝得多!)(大象喝得多!)。

这里有一个简单的视觉效果,显示了pandas是如何进行 "分割 "的--用groupby 和聚合。

pandas aggregation with groupby explained

它只是将相似的数值分组,并为每组计算给定的聚合值*(在上面的例子中,它是一个平均值)*。

Pandas groupby() - 实践中

让我们在我们的zoo DataFrame上真实地进行上述的分组和聚合。
我们必须在我们的zoo 变量和我们的.mean() 函数之间插入一个groupby 关键字。

zoo.groupby('animal').mean()

pandas groupby example

就像以前一样,pandas自动为每一列运行.mean() 计算(animal 列消失了,因为那是我们分组的列)。你可以忽略uniq_id 列,也可以在事后通过使用这些语法之一来删除它。

zoo.groupby('animal').mean()[['water_need']] -" 这将返回一个DataFrame对象。

zoo.groupby('animal').mean().water_need -" 这将返回一个系列对象。

pandas groupby example column

很明显,你可以把聚合方法从.mean() 改成任何东西,我们在上面学到的!

让我们再看一个例子,结合pandasgroupbycount!

Pandas groupby() 和 count()

我只是想加入这个例子,因为这是你发现一个新数据集时最常见的操作。将countgroupby 一起使用,就像前面的例子一样简单。

只要键入这个。

zoo.groupby('animal').count()

就会神奇地将不同的动物按熊猫来计算。

pandas group by count

好了!现在你知道了一切,你必须知道!
现在是时候...

测试自己#1(另一个计数+分组的挑战)

让我们回到我们的article_read 数据集。

(注意:记住,这个数据集保存的是一个旅游博客的数据。如果你还没有这些数据,你可以从这里下载。或者你可以通过阅读这个pandas教程的上一集来逐步完成整个下载--开放存储的过程)。

count groupby in pandas example

如果你已经准备好了一切,这里是我的第一个任务。

article_read 数据框中最频繁的来源是什么?
..

.
而答案是Reddit!

我是怎么得到它的?使用这个代码。

article_read.groupby('source').count()

我将为你分解。

  1. 采取article_read 数据集!
  2. 使用groupby() ,并通过source 列的值创建分段!
  3. 并最终通过在groupby() 部分之后使用.count() 来计算每个组中的值。

pandas count group by

你可以--选择性地--删除不必要的列,只保留user_id 列,像这样。

article_read.groupby('source').count()[['user_id']]

测试自己 #2

这里是另一个稍微复杂的挑战。

对于country_2 的用户,最频繁的topicsource 组合是什么?或者换句话说:哪个topic ,来自哪个source ,带来了最多的来自country_2 的浏览?
..

.
结果是**Reddit(来源)和Asia(主题)的组合,有139次阅读!**而Python代码得到了这个结果。
而得到这个结果的Python代码是。

article_read[article_read.country == 'country_2'].groupby(['source', 'topic']).count()

pandas group by count

这里有一个简单的解释。

  1. 首先,我们过滤了country_2 的用户,其中有article_read[article_read.country == 'country_2']
  2. 然后在这个子集上,我们应用了groupby pandas方法......哦,我有没有提到你可以按多列分组?现在你也知道了吧! 😉 (从语法上讲,要注意一件事:你必须把列的名称放到一个列表中。这就是为什么大括号的框架要放在小括号之间的原因)。(那是groupby(['source', 'topic']) 。)
  3. 而按照惯例:count() 函数是拼图的最后一块。

结论 (pandas groupby, count, sum, min, max, etc.)

这是我的pandas教程系列的第二集。现在你看到聚合和分组在pandas中并不难......相信我,你会经常用到它们的

注意:如果你以前使用过SQL,我鼓励你休息一下,比较一下pandas和SQL的聚合方法。有了这个,你就会更加了解这两种语言之间的关键区别了

在下一篇文章中,我将向你展示四个最常用的pandas数据处理方法。merge,sort,reset_indexfillna 。请继续关注我:Pandas教程,第三集

干杯。
托米-梅斯特

PS.关于详细的指南,请查看pandas的官方指南(它非常更新--最后一次更新是在2022年),这里

The postPandas groupby(), count(), sum() and Other Aggregation Methods (Pandas Tutorial 2.)appeared first onData36.