5-Pandas數據聚合(GroupBy.agg())


  數據聚合除了GroupBy.mean()的聚合方法外,另一種直觀的方法是直接接在GroupBy對象之后;

例:

>>> import pandas as pd
>>> df = pd.read_excel('./input/class.xlsx')
>>> df
  class     sex  score_math  score_music
0     A    male          95           79
1     A  female          96           90
2     B  female          85           85
3     C    male          93           92
4     B  female          84           90
5     B    male          88           70
6     C    male          59           89
7     A    male          88           86
8     B    male          89           74
#先對其進行GroupBy操作
>>> grouped = df.groupby('class')
#以下兩種方式的結果完全相同
>>> grouped.sum()
       score_math  score_music
class
A             279          255
B             346          319
C             152          181

>>> grouped.agg('sum')
       score_math  score_music
class
A             279          255
B             346          319
C             152          181

  可以同時使用多個聚合函數(使用列表的格式),其結果將包含一個層次化索引,新加的索引名稱是函數的名稱。

>>> grouped.agg([np.sum,np.mean])
      score_math       score_music
             sum  mean         sum   mean
class
A            279  93.0         255  85.00
B            346  86.5         319  79.75
C            152  76.0         181  90.50

  數據聚合也可使用自定義聚合函數:自定義的函數必須具有聚合的作用,若傳入一個一個數組(1維),必須只能返回標量值(0維)

需要注意的是:在構造中間分組數據塊時可能存在函數調用、數據重排等較大的開銷。

>>> grouped.agg([np.sum,lambda x:x.max()-x.min()])
      score_math          score_music
             sum <lambda>         sum <lambda>
class
A            279        8         255       11
B            346        5         319       20
C            152       34         181        3

  列表中傳入一個二元元組(函數名,函數),可以更改列名

>>> grouped.agg([('sum',np.sum),('range',lambda x:x.max()-x.min())])
      score_math       score_music
             sum range         sum range
class
A            279     8         255    11
B            346     5         319    20
C            152    34         181     3

  對於不同的列執行不同的聚合運算,可以向agg()函數傳入一個字典,將多個函數運用到至少一列時,聚合結果才會擁有層次化索引

所以,在單獨的運用一個函數時,若需要顯示層次化索引,就可以使用列表的形式“假裝”要對某一列運用多個聚合運算。

>>> map_func = {'score_math':[np.mean,np.max],'score_music':[np.mean,np.min]}
>>> grouped.agg(map_func)
      score_math      score_music
            mean amax        mean amin
class
A           93.0   96       85.00   79
B           86.5   89       79.75   70
C           76.0   93       90.50   89

#假裝要對某一列進行多個聚合運算,以達到層次化索引的結果
>>> map_func = {'score_math':[np.max],'score_music':[np.min]}
>>> grouped.agg(map_func)
      score_math score_music
            amax        amin
class
A             96          79
B             89          70
C             93          89

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM