Pandas中g(shù)roupby的這些用法你都知道嗎?
導(dǎo)讀
pandas作為Python數(shù)據(jù)分析的瑞士軍刀,集成了大量實用的功能接口,基本可以實現(xiàn)數(shù)據(jù)分析一站式處理。前期,筆者完成了一篇pandas系統(tǒng)入門教程,也針對幾個常用的分組統(tǒng)計接口進行了介紹,今天再針對groupby分組聚合操作進行拓展講解。

01 如何理解pandas中的groupby操作

其中:
split:按照某一原則(groupby字段)進行拆分,相同屬性分為一組
apply:對拆分后的各組執(zhí)行相應(yīng)的轉(zhuǎn)換操作
combine:輸出匯總轉(zhuǎn)換后的各組結(jié)果
02 分組(split)——groupby
groupby首先要指定分組原則,這也是groupby函數(shù)的第一步,其常用參數(shù)包括:
by,分組字段,可以是列名/series/字典/函數(shù),常用為列名
axis,指定切分方向,默認為0,表示沿著行切分
as_index,是否將分組列名作為輸出的索引,默認為True;當設(shè)置為False時相當于加了reset_index功能
sort,與SQL中g(shù)roupby操作會默認執(zhí)行排序一致,該groupby也可通過sort參數(shù)指定是否對輸出結(jié)果按索引排序

單列作為分組字段,不設(shè)置索引

單列字段的轉(zhuǎn)換格式作為分組字段

字典,根據(jù)索引對記錄進行映射分組

函數(shù),根據(jù)函數(shù)對索引的執(zhí)行結(jié)果進行分組

03 轉(zhuǎn)換(apply)——agg/apply/transform
分組之后的第二個步驟即為分組轉(zhuǎn)換操作,也就是應(yīng)用(apply)一定的函數(shù)得到相應(yīng)的結(jié)果。常用的執(zhí)行操作方式有4種:
直接加聚合函數(shù),但只能實現(xiàn)單一功能,常用聚合函數(shù)包括:mean/sum/median/min/max/last/first等,最為簡單直接的聚合方式
agg(或aggregate),執(zhí)行更為豐富的聚合功能,常用列表、字典等形式作為參數(shù)


apply,除了agg豐富的可選聚合函數(shù)外,apply還可以自定義面向分組的聚合函數(shù)

transform,又一個強大的groupby利器,其與agg和apply的區(qū)別相當于SQL中窗口函數(shù)和分組聚合的區(qū)別:transform并不對數(shù)據(jù)進行聚合輸出,而只是對每一行記錄提供了相應(yīng)聚合結(jié)果;而后兩者則是聚合后的分組輸出。


實際上,pandas中幾乎所有需求都存在不止一種實現(xiàn)方式!
04 時間序列的groupby——resample
再次指出,groupby相當于是按照某一規(guī)則對數(shù)據(jù)進行分組聚合,當分組的規(guī)則是時間序列時,還存在另一種特殊的分組方式——重采樣resample。理解groupby的split-apply-combine三步走處理流程,那么自然也很容易理解resample處理流程:按照時間split——apply——combine。同時,也正因為resample是一種特殊的分組聚合,所以groupby的4種轉(zhuǎn)換操作自然也都適用于resample。


當然,這是直接用了聚合函數(shù),更復(fù)雜的例如agg、apply和transform等用法也是一樣的。換句話說,resample與groupby的核心區(qū)別僅在于split階段:前者按照時間間隔進行分組,而后者是按照定義的某種規(guī)則進行分組。

需要指出,resample等價于groupby操作一般是指下采樣過程;同時,resample也支持上采樣,此時需設(shè)置一定規(guī)則進行插值填充。
python爬蟲人工智能大數(shù)據(jù)公眾號

