groupby+agg


一.在處理pandas表格數據時,有時會遇到這樣的問題:按照某一列聚合后,判斷另一列是否出現唯一值,比如安泰杯--跨境電商比賽中,某個商人的ID如果出現在兩個國家(xx和yy),則要剔除這樣的數據,這就需要我們按照商人ID進行groupby,然后判斷每個商人所屬的國家是否值唯一,不唯一則剔除。

def unique_num(x):

  return len(np.unique(x))  #自定義函數

train.groupby(['buyer_admin_id']).agg({'buyer_country_id':unique_num})

二.下面對groupby和agg使用方法進行總結:

1. 分組后,返回一個含有分組大小的Series

按key1分組:  df.groupby(['key1']).size()

按[key1,key2]分組: df.groupby(['key1','key2']).size()

2. 對data1按key1進行分組,並計算data1列的平均值

 df['data1'].groupby(df['key1']).mean()

說明:groupby沒有進行任何的計算。它只是進行了一個分組。數據(Series)根據分組鍵進行了聚合,產生了一個新的Series,其索引為key1列中的唯一值。

3.對data1按[key1,key2]進行分組,並計算data1的平均值

df.groupby(['key1','key2'])['data1'].mean()

4.agg函數使用:

1)df.groupby(['key1'])['data1'].min() == 

     df.groupby(['key1'])['data1'].agg({'min'}) ==

     (推薦使用)df.groupby(['key1']).agg({'data1':'min'})#對data1列,取各組的最小值,名字還是data1

2)按key1分組后,aggregate各組data1的最小值和最大值:

df.groupby(['key1'])['data1'].agg({'min','max'}) ==(推薦使用)df.groupby(['key1']).agg({'data1':['min','max']})

3)可以對groupby的結果更正列名(不推薦用這個,哪怕在后面單獨更改列名):

df.groupby(['key1'])['data1'].agg({'a':'min','b':'max'})#這里的'min' 'max'為兩個函數名


免責聲明!

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



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