pandas 的groupby()
阿新 • • 發佈:2020-07-16
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())