自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Pandas 中實(shí)現(xiàn)聚合統(tǒng)計(jì),有幾種方法?

大數(shù)據(jù)
pandas是當(dāng)前Python數(shù)據(jù)分析中最為重要的工具,其提供了功能強(qiáng)大且靈活多樣的API,可以滿足使用者在數(shù)據(jù)分析和處理中的多種選擇和實(shí)現(xiàn)方式。今天本文以Pandas中實(shí)現(xiàn)分組計(jì)數(shù)這個(gè)最基礎(chǔ)的聚合統(tǒng)計(jì)功能為例,分享多種實(shí)現(xiàn)方案,最后一種應(yīng)該算是一個(gè)騷操作了……

pandas是當(dāng)前Python數(shù)據(jù)分析中最為重要的工具,其提供了功能強(qiáng)大且靈活多樣的API,可以滿足使用者在數(shù)據(jù)分析和處理中的多種選擇和實(shí)現(xiàn)方式。今天本文以Pandas中實(shí)現(xiàn)分組計(jì)數(shù)這個(gè)最基礎(chǔ)的聚合統(tǒng)計(jì)功能為例,分享多種實(shí)現(xiàn)方案,最后一種應(yīng)該算是一個(gè)騷操作了……

[[404468]]

這里首先給出模擬數(shù)據(jù)集,不妨給定包括如下兩列的一個(gè)dataframe,需求是統(tǒng)計(jì)各國將領(lǐng)的人數(shù)。應(yīng)該講這是一個(gè)很基礎(chǔ)的需求,旨在通過這一需求梳理pandas中分組聚合的幾種通用方式。

value_counts上述需求是統(tǒng)計(jì)各國將領(lǐng)的人數(shù),換言之就是在上述數(shù)據(jù)集中統(tǒng)計(jì)各個(gè)國家出現(xiàn)的次數(shù)。所以實(shí)現(xiàn)這一目的只需簡單的對(duì)國家字段進(jìn)行計(jì)數(shù)統(tǒng)計(jì)即可:

當(dāng)然,以上實(shí)現(xiàn)其實(shí)僅適用于計(jì)數(shù)統(tǒng)計(jì)這種特定需求,對(duì)于其他的聚合統(tǒng)計(jì)是不能滿足的。

groupby+count第一種實(shí)現(xiàn)算是走了取巧的方式,對(duì)于更為通用的聚合統(tǒng)計(jì)其實(shí)是不具有泛化性的,那么pandas中標(biāo)準(zhǔn)的聚合是什么樣的呢?對(duì)于上述僅有一種聚合函數(shù)的例子,在pandas中更傾向于使用groupby直接+聚合函數(shù),例如上述的分組計(jì)數(shù)需求,其實(shí)就是groupby+count實(shí)現(xiàn)。

進(jìn)一步的,其具體實(shí)現(xiàn)形式有兩種:

1、分組后對(duì)指定列聚合,在這種形式中依據(jù)country分組后只提取name一列,相當(dāng)于每個(gè)country下對(duì)應(yīng)了一個(gè)由多個(gè)name組成的series,而后的count即為對(duì)這個(gè)series進(jìn)行count。

2、分組后直接聚合,然后再提取指定列。此時(shí),依據(jù)country分組后不限定特定列,而是直接加聚合函數(shù)count,此時(shí)相當(dāng)于對(duì)列都進(jìn)行count,此時(shí)得到的仍然是一個(gè)dataframe,而后再從這個(gè)dataframe中提取對(duì)特定列的計(jì)數(shù)結(jié)果。

值得指出,在此例中country以外的其他列實(shí)際上也是只有name一列,但與第一種形式其實(shí)也是不同的,具體在于未加提取name列之前,雖然也是只有name一列,但卻還是一個(gè)dataframe:

groupby+agg上述方法是直接使用groupby+相應(yīng)的聚合函數(shù),這種聚合統(tǒng)計(jì)方法簡單易懂,但缺點(diǎn)就是僅能實(shí)現(xiàn)單一的聚合需求,對(duì)于有多種聚合函數(shù)的情況是不適用的。此時(shí),功能更為強(qiáng)大的agg函數(shù)隨之登場(chǎng)。agg是aggregation的縮寫,可見其是專門用于聚合統(tǒng)計(jì)的,其可以接收多種不同的聚合函數(shù),因而更具可定制性。

agg函數(shù)主要接收兩個(gè)參數(shù),第一個(gè)參數(shù)func用于接收聚合算子,可以是一個(gè)函數(shù)名或?qū)ο?,也可以是一個(gè)函數(shù)列表,還可以是一個(gè)字典,使用方法很是靈活;第二參數(shù)axis則是指定聚合所沿著的軸向,默認(rèn)是axis=0,即沿著行的方向?qū)α芯酆稀gg的函數(shù)文檔如下:

這里,仍然以上述分組計(jì)數(shù)為例,講解groupby+agg的三種典型應(yīng)用方式:

1、agg內(nèi)接收聚合函數(shù)或聚合函數(shù)列表。具體實(shí)現(xiàn)形式也分為兩種,與前面groupby直接+聚合函數(shù)的用法類似。實(shí)際上,該種用法其實(shí)與groupby直接+聚合函數(shù)極為類似。

2、agg內(nèi)接收聚合函數(shù)字典,其中key為列名,value為聚合函數(shù)或函數(shù)列表,可實(shí)現(xiàn)同時(shí)對(duì)多個(gè)不同列實(shí)現(xiàn)不同聚合統(tǒng)計(jì)。這里字典的key是要聚合的name字段,字典的value即為要用的聚合函數(shù)count,當(dāng)然也可以是包含count的列表的形式。用字典傳入聚合函數(shù)的形式下,統(tǒng)計(jì)結(jié)果都是一個(gè)dataframe,更進(jìn)一步的說當(dāng)傳入字典的value是聚合函數(shù)列表時(shí),結(jié)果中dataframe的列名是一個(gè)二級(jí)列名。

3、agg內(nèi)接收新列名+元組,實(shí)現(xiàn)對(duì)指定列聚合并重命名。對(duì)于聚合函數(shù)不是特別復(fù)雜而又希望能同時(shí)完成聚合列的重命名時(shí),可以選用此種方式,具體傳參形式實(shí)際上采用了python中可變字典參數(shù)**kwargs的用法,其中字典參數(shù)中的key是新列名,value是一個(gè)元組的形式,包括聚合字段列名和聚合函數(shù)。

groupby+apply如果說上述實(shí)現(xiàn)方式都還是pandas里中規(guī)中矩的聚合統(tǒng)計(jì),那么這一種方式則是不是該算是一種騷操作?實(shí)際上,這是應(yīng)用了pandas中apply的強(qiáng)大功能,具體可參考?xì)v史推文Pandas中的這3個(gè)函數(shù),沒想到竟成了我數(shù)據(jù)處理的主力。

由于apply支持了多種重載方法,所以對(duì)于分組后的grouped dataframe應(yīng)用apply,也可實(shí)現(xiàn)特定的聚合函數(shù)統(tǒng)計(jì)功能。首先看如下實(shí)際應(yīng)用:

在上述方法中,groupby('country')后的結(jié)果,實(shí)際上是得到了一個(gè)DataFrameGroupBy對(duì)象,實(shí)際上是一組(key, value)的集合,其中每個(gè)key對(duì)應(yīng)country列中的一種取值,每個(gè)value為該key對(duì)應(yīng)的一個(gè)子dataframe,具體拆解打印如下:

而后,groupby后面接的apply函數(shù),實(shí)質(zhì)上即為對(duì)每個(gè)分組下的子dataframe進(jìn)行聚合,具體使用何種聚合方式則就看apply中傳入何種參數(shù)了!

總結(jié)本文針對(duì)一個(gè)最為基礎(chǔ)的聚合統(tǒng)計(jì)場(chǎng)景,介紹pandas中4類不同的實(shí)現(xiàn)方案,其中第一種value_counts不具有一般性,僅對(duì)分組計(jì)數(shù)需求適用;第二種groupby+聚合函數(shù),是最為簡單和基礎(chǔ)的聚合統(tǒng)計(jì),僅適用于單一聚合函數(shù)的需求;第三種groupby+agg,具有靈活多樣的傳參方式,是功能最為強(qiáng)大的聚合統(tǒng)計(jì)方案;而第四種groupby+apply則屬于是靈活應(yīng)用了apply的重載功能,可以用于完成一些特定的統(tǒng)計(jì)需求。

最后,雖然本文以簡單的分組計(jì)數(shù)作為講解案例,但所提到的方法其實(shí)是能夠代表pandas中的各種聚合統(tǒng)計(jì)需求。

責(zé)任編輯:未麗燕 來源: 小數(shù)志
相關(guān)推薦

2024-06-03 08:26:34

Android開發(fā)監(jiān)聽器

2009-09-18 12:29:55

2013-02-25 14:46:49

2009-09-09 11:24:46

PHP實(shí)現(xiàn)MVC

2010-04-30 16:22:07

Unix終端

2021-03-08 09:32:04

Python文件命令

2018-02-08 09:04:58

Nginx404頁面方法

2018-08-09 20:47:41

2009-06-09 11:19:49

2020-07-24 20:45:51

Spark數(shù)據(jù)集函數(shù)

2009-08-25 09:22:01

DataGridVie

2024-02-21 08:33:27

GoReadDir性能

2020-10-16 18:35:53

JavaScript字符串正則表達(dá)式

2013-08-21 11:31:21

iPhone圖片方法

2010-06-03 08:55:43

LINQ

2010-05-17 15:17:06

MySQL常用操作

2020-03-24 09:06:45

Java對(duì)象大小

2020-01-10 16:23:44

Springboot停止服務(wù)Java

2020-08-24 08:05:47

JavaScriptJavaScript 頁面

2021-02-26 13:20:48

Shell空行Linux
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)