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

01 如何理解pandas中的groupby操作

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

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

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

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

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

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


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

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


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


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

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

