什么是分組聚合?
如圖:
- groupby:(by=None,as_index=True)
by:根據什么進行分組,用于確定groupby的組
as_index:對于聚合輸出,回傳以組便簽為索引的物件,僅對DataFrame
df1 = pd.DataFrame({'fruit':['apple','banana','orange','apple','banana'],
'color':['red','yellow','yellow','cyan','cyan'],
'price':[8.5,6.8,5.6,7.8,6.4]})
#查看型別
type(df1.groupby('fruit'))
pandas.core.groupby.groupby.DataFrameGroupBy #GruopBy物件,它是一個包含組名,和資料塊的2維元組序列,支持迭代
for name, group in df1.groupby('fruit'):
print(name) #輸出組名
apple
banana
orange
print(group) # 輸出資料塊
fruit color price
0 apple red 8.5
3 apple cyan 7.8
fruit color price
1 banana yellow 6.8
4 banana cyan 6.4
fruit color price
2 orange yellow 5.6
#輸出group型別
print(type(group)) #資料塊是dataframe型別
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.frame.DataFrame'>
#選擇任意的資料塊
dict(list(df1.groupby('fruit')))['apple'] #取出apple組的資料塊
fruit color price
0 apple red 8.5
3 apple cyan 7.8
聚合
#Groupby物件具有上表中的聚合方法 #根據fruit來求price的平均值 df1['price'].groupby(df1['fruit']).mean() fruit apple 8.15 banana 6.60 orange 5.60 Name: price, dtype: float64 #或者 df1.groupby('fruit')['price'].mean() #as_index=False df1.groupby('fruit',as_index=False)['price'].mean() fruit price 0 apple 8.15 1 banana 6.60 2 orange 5.60 """ 如果我現在有個需求,計算每種水果的差值, 1.上表中的聚合函式不能滿足于我們的需求,我們需要使用自定義的聚合函式 2.在分組物件中,使用我們自定義的聚合函式 """ #定義一個計算差值的函式 def diff_value(arr): return arr.max() - arr.min() #使用自定義聚合函式,我們需要將函式傳遞給agg或aggregate方法,我們使用自定義聚合函式時,會比我們表中的聚合函式慢的多,因為要進行函式呼叫,資料重新排列 df1.groupby('fruit')['price'].agg(diff_value) fruit apple 0.7 banana 0.4 orange 0.0 Name: price, dtype: float64
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/274355.html
標籤:其他
