1. 程式人生 > 實用技巧 >pandas 的groupby()

pandas 的groupby()

groupby():

groupby函式可以將一個df根據某一列或者某幾列分組又或者是函式分組,經過groupby後悔生成一個groupby物件,該物件本身不會返回任何內容,只有當相應的方法被呼叫時才會起作用

我們使用iris資料做例子

from sklearn.datasets import load_iris
import pandas as pd 
import numpy as np
iris=load_iris()
df=pd.DataFrame(iris.data,columns=iris.feature_names)
df['sample']=iris.target

1.根據某一列分組

#根據sample分組
group_sample=df.groupby('sample')

#get_group()是檢視某一分組,比如說上面的sample有三種類別,我們可以使用get_group()檢視某一類別
group_sample.get_group(0).head()

2.根據某幾列分組,和根據某列分組用法基本一致

#列名需要以list形式傳入
group_n=df.groupby(['petal width (cm)', 'sample'])

group_n.get_group((0.1,0))

3.檢視組容量和組數(size)

#呼叫get_group時可以先檢視一個有幾種分組,組內的容量是怎麼樣的
group_n.size()

4.組的遍歷,得到的組內資料分別是一個個df

#name,group 分別是組名和組內資料
for name,group in group_n:
    print(name)
    print(group.head())

5.head()和first()

#head()返回的是每個組的前某幾行,而不是資料集的前幾行
group_n.head(2)

#first()返回的每個分組的第一行資訊,組成了一個df 
group_n.first()

6.[col].數學統計變數,即是計算每個分組該列的數學統計值

#計算每個分組的某列的平均值
group_n['
sepal length (cm)'].mean() #返回的布林型的值 group_n['sepal length (cm)'].mean()>5

7.聚合函式(mean/sum/size/count/std/var/sem/describe/first/last/nth/min/max),用法上面例子有,就不贅述了,

下面主要說一下agg()同時使用多個聚合函式

#計算每組每個特徵的平均值
group_n.mean()

#同時使用多個聚合函式
group_n.agg(('sum','mean'))
group_n.agg(['sum','mean'])

#和上面一樣,只不過是重新命名了
group_n.agg([('rename_sum','sum'),('rename_mean','mean')])

#指定某一列使用某些函式,以字典形式傳入
group_n.agg({'sepal length (cm)':['mean','max'],'sepal width (cm)':'var'})

#使用匿名函式或者自定義函式
group_n.agg(lambda x:x.max()-x.min())