利用Pandas將數據進行分組,并將各組進行聚合或自定義函數處理。

導入模塊
import pandas as pd
縮寫
df表示Dataframe對象
分組
- df.groupby('col1'): 根據col1列將df全部列分組(默認:axis=0行)
- df['col2'].groupby('col1'): 根據col1列對df中col2列分組
- =df['col2'].groupby(df['col1'])
- =df.groupby('col1')[['col2']]
- =df.groupby('col1')['col2']
- df.groupby(['col1','col2']): 根據col1,col2列將df分組
- dict(list(df.groupby('col1'))): 將分組存為key為組名,value為group的字典
- for name,group in df.groupby('col1'): 遍歷分組名+組
- for (n1,n2),group in df.groupby(['col1','col2']): 遍歷取層級分組名+組
- df.groupby(df.types, axis=1): 根據數據類型對df列分組
- df.groupby(dict/list,axis=1):以字典或列表對df各列分組
- dict中key為列名,value為分類標簽,根據分類標簽將列分類
- df.groupby(len):計算df索引值的字符串長度,以長度值為分組及組名
- df.groupby([len,list]):混和使用,層次化索引(0層:len,1層,list)
- df.groupby(level='num',axis=1):層次化索引df中,以索引層名為num的列分組
- groupby(group_keys=False): 分組列不成為索引
- =reset_index()
聚合
>>>grouped = df.groupby('col1')
- grouped.mean() :分組計算均值
- grouped.agg('mean'):同上
- grouped.size():分組大小
- grouped.count():分組中非NA的數量
- grouped.median():分組中位數
- grouped.std():分組無偏標準差(分母n-1)
- grouped.var():分組無偏方差
- grouped.min():非NA最小值
- grouped.max():非NA最大值
- grouped.prod():非NA值的積
- grouped.first():第一個非NA值
- grouped.last():最后一個非NA值
- grouped('col2').quantile(0.5):以col2列的0.5分位數聚合
自定義函數
- grouped.agg(func):以自定義的func函數聚合
- func 是以sereis為基礎的操作
- 默認聚合后的列名為func名
- grouped.agg([(name,func)]):指定列名,不用func名
- =grouped.aggregate(func)
- grouped[col].agg([func1,‘mean','std',...,funcn]): 對分組列col使用多個聚合函數
- grouped[col1,col2].agg([func1,funcn]): 分組后的多列使用多個聚合函數
- grouped.agg({col:func1,col2:func2}): 對col1列用func1聚合,col2列用func2聚合
分組級運算
本質:將一維數組簡化為標量值的函數
- grouped.transform(func): 將聚合的標量值廣播
- grouped.apply(func,param1,param2....): 對各個分組列使用func函數,param是func的參數
- groupby + pd.cut : 將數據分為等距區間分組
- groupby + pd.qcut: 將數據根據分位數區間分組
透視表與交叉表
- df.pivot_table() : 透視表
- rows:行索引
- cols:列索引
- margins:總計行列數據,默認平均值
- fill_value:填補缺失值
- pd.crosstab(df.col1,df.col2) : 交叉表計算分組頻率的特殊透視表