Python數據分析入門(十二):數據聚合與分組

什麼是分組聚合?

如圖:app

 

  • groupby:(by=None,as_index=True)

by:根據什麼進行分組,用於肯定groupby的組函數

as_index:對於聚合輸出,返回以組便籤爲索引的對象,僅對DataFrameui

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
相關文章
相關標籤/搜索