一.在處理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'為兩個函數名