Pandas中實(shí)現(xiàn)聚合統(tǒng)計(jì),有幾種方法?
導(dǎo)讀
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è)騷操作了……



當(dāng)然,以上實(shí)現(xiàn)其實(shí)僅適用于計(jì)數(shù)統(tǒng)計(jì)這種特定需求,對(duì)于其他的聚合統(tǒng)計(jì)是不能滿足的。
分組后對(duì)指定列聚合,在這種形式中依據(jù)country分組后只提取name一列,相當(dāng)于每個(gè)country下對(duì)應(yīng)了一個(gè)由多個(gè)name組成的series,而后的count即為對(duì)這個(gè)series進(jìn)行count。

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

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


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


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)一步的說(shuō)當(dāng)傳入字典的value是聚合函數(shù)列表時(shí),結(jié)果中dataframe的列名是一個(gè)二級(jí)列名。


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

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


而后,groupby后面接的apply函數(shù),實(shí)質(zhì)上即為對(duì)每個(gè)分組下的子dataframe進(jìn)行聚合,具體使用何種聚合方式則就看apply中傳入何種參數(shù)了!
本文針對(duì)一個(gè)最為基礎(chǔ)的聚合統(tǒng)計(jì)場(chǎng)景,介紹pandas中4類不同的實(shí)現(xiàn)方案,其中第一種value_counts不具有一般性,僅對(duì)分組計(jì)數(shù)需求適用;第二種groupby+聚合函數(shù),是最為簡(jiǎn)單和基礎(chǔ)的聚合統(tǒng)計(jì),僅適用于單一聚合函數(shù)的需求;第三種groupby+agg,具有靈活多樣的傳參方式,是功能最為強(qiáng)大的聚合統(tǒng)計(jì)方案;而第四種groupby+apply則屬于是靈活應(yīng)用了apply的重載功能,可以用于完成一些特定的統(tǒng)計(jì)需求。
最后,雖然本文以簡(jiǎn)單的分組計(jì)數(shù)作為講解案例,但所提到的方法其實(shí)是能夠代表pandas中的各種聚合統(tǒng)計(jì)需求。

相關(guān)閱讀:
