Pandas (五) 數據分組


我們經常需要對某些標簽或索引的局部進行累計分析, 這時就需要用到 groupby 了.

實際上,我們可以把 groupby 理解成一個分割(split),應用(apply),組合(combine)的過程.

 

一個經典分割-應用-組合操作如下圖所示,其中應用的是一個求和函數.

  • 分割: 將 DataFrame按照指定的鍵分割成若干組
  • 應用: 對每個組應用函數, 通常是累計,轉換或過濾函數
  • 組合: 將每一組的結果合並成一個輸出組

 

在數據處理中, 我們經常需要把某些特征的共同值進行累計分析.

例如有一列特征, 儲存的是用戶學歷數據, 分為, 初中, 高中, 大學

我們經常做的一件事情是, 將初中的, 高中, 大學的都各自分為一組, 然后統計每一組中的不同統計量的值.

df.groupby('學歷') # by 以----進行分組

需要注意的是,這里的返回值不是一個 DataFrame 對象,而是一個 DataFrameGroupBy 對象。

你可以將它看成是一種特殊形式的 DataFrame,里面隱藏着若干組數據,但是在沒有應用累計函數之前並不會真的計算。

我們在應用累計函數之后, 就會完成真正的計算。

df.groupby('學歷').count()

df.groupby('學歷').sum()

df.groupby('學歷').mean()

……

1.篩選列

可以直接在groupby對象中選擇列:

df.groupby('學歷')['產品評分'].mean()

也可以統計后在選擇列:

df.groupby('學歷').mean()['產品評分']

2.可以通過遍歷的方法, 將DataFrameGroupBy中的數據打印出來

for group_name,group_data in df.groupby('學歷'):
    print(group_name)
    print("-------")
    print(group_data)
    print('---------分割線----------')

特殊需求:

  1. 假如對於一列,我想要同時應用多個統計函數呢?
  2. 假如對於不同的列,我想要用不同的統計函數呢?
  3. 應用自定義函數進行統計
test  = df.groupby('學歷')
test.agg(['max','min','mean']) # 列表,同時統計多個統計值
test.agg({"測試成績":['mean','std','var'], "產品評分":['max','min','mean']})

也可以應用自定義的統計函數進行統計。

 

 

 

 


免責聲明!

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



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