05.24 「乾貨教程6」Pandas如何分組「推薦」

03

Groupby:分-治-合

group by具體來說就是分為3步驟,分-治-合,具體來說:

分:基於一定標準,splitting數據成為不同組治:將函數功能應用在每個獨立的組上合:收集結果到一個數據結構上分和合按照字面理解就可,但是“治”又是怎麼理解,進一步將治分為3件事:

聚合操作,比如統計每組的個數,總和,平均值轉換操作,對每個組進行標準化,依據其他組隊個別組的NaN值填充過濾操作,忽略一些組,比如個數不夠指定大小的下面詳細說下,分,治,這兩步操作。合地話就是映射為具體的某個數據結構。

04

分(splitting)

分組就是根據默認的索引映射為不同索引取值的分組名稱,來看如下所示的DataFrame實例df_data,可以按照多種方式對它分組,直接調用groupby接口,

「乾貨教程6」Pandas如何分組「推薦」

df_data.groupby('A')默認是按照axis=0分組的(行),如果按照列,修改軸,即

df_data.groupby('A' , axis=1)也可以按照多個列分組,比如:

df_data.groupby([ 'A', 'B'] )05

選擇分組

分組後返回的對象類型為:DataFrameGroupBy,我們看下按照列標籤'A'分組後,因為'A'的可能取值為:foo, bar ,所以分為了兩組,通過DataFrameGroupBy的get_group可以取得對應的組內行,如下圖所示,

agroup = df.groupby('A')agroup.get_group('foo')

同樣的方法,看下bar組包括的行:

agroup = df.groupby('A')agroup.get_group('bar')

如果我們想看下每組的第一行,可以調用 first(),可以看到是每個分組的第一個,last()顯示每組的最後一個:

agroup.first()

06

治:分組上的操作

對分組上的操作,最直接的是使用aggregate操作,如下,求出每個分組上對應列的總和,大家可以根據上面的分組情況,對應驗證:

agroup = df.groupby('A')agroup.aggregate(np.sum)

如果根據兩個字段的組合進行分組,如下所示,為對應分組的總和,

abgroup = df.groupby(['A','B'])abgroup.aggregate(np.sum)

查詢對應每個分組的個數,返回的是Series實例:

abgroup.size()

如果需要查看,分組foo, one 的個數,如下,得到個數 2.

abgroup.size()['foo']['one']獲得每個分組的統計信息,調用describe接口,如下所示:

abgroup.describe()

一次應用多個函數:

agroup = df.groupby('A')agroup.agg([np.sum, np.mean, np.std])

「乾貨教程6」Pandas如何分組「推薦」

「乾貨教程6」Pandas如何分組「推薦」


分享到:


相關文章: