pandas 分組操作


任何分組(groupby)操作都涉及原始對象的以下操作之一。它們是

  • 分割對象
  • 應用一個函數
  • 結合的結果

在許多情況下,將數據分成多個集合,並在每個子集上應用一些函數。在應用函數中,可以執行以下操作

  • 聚合 - 計算匯總統計
  • 轉換 - 執行一些特定於組的操作
  • 過濾 - 在某些情況下丟棄數據

下面來看看創建一個DataFrame對象並對其執行所有操作:

import pandas as pd ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings', 'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'], 'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2], 'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017], 'Points':[876,789,863,673,741,812,756,788,694,701,804,690]} df = pd.DataFrame(ipl_data)

將數據拆分成組

Pandas對象可以分成任何對象。有多種方式來拆分對象,如

  • obj.groupby(‘key’)
  • obj.groupby([‘key1’,’key2’])
  • obj.groupby(key,axis=1)

現在來看看如何將分組對象應用於DataFrame對象

df.groupby('Year')

查看分組

df.groupby('Team').groups

按多列分組

df.groupby(['Team','Year']).groups

選擇一個分組

使用get_group()方法,可以選擇一個組。例如:

grouped.get_group(2014)

聚合

聚合函數為每個組返回單個聚合值。當創建了分組(group by)對象,就可以對分組數據執行多個聚合操作。

一個比較常用的是通過聚合或等效的agg方法聚合:

grouped['Points'].agg(np.mean)

另一種查看每個分組的大小的方法是應用size()函數:

import numpy as np grouped.agg(np.size)

一次應用多個聚合函數

通過分組系列,還可以傳遞函數的列表或字典來進行聚合,並生成DataFrame作為輸出

agg = grouped['Points'].agg([np.sum, np.mean, np.std])

轉換

分組或列上的轉換返回索引大小與被分組的索引相同的對象。因此,轉換應該返回與組塊大小相同的結果。

grouped = df.groupby('Team') score = lambda x: (x - x.mean()) / x.std()*10
print (grouped.transform(score))

過濾

過濾根據定義的標准過濾數據並返回數據的子集。filter()函數用於過濾數據。

 

filter = df.groupby('Team').filter(lambda x: len(x) >= 3)

 

 


免責聲明!

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



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