1. 起因
利用python的pandas庫進(jìn)行數(shù)據(jù)分組分析十分便捷粹湃,其中應(yīng)用最多的方法包括:groupby、pivot_table及crosstab泉坐,以下分別進(jìn)行介紹为鳄。
2. 詳解
首先構(gòu)造數(shù)據(jù)
import numpy as np
import pandas as pd
df = pd.DataFrame({'key1':['a','a','b','b','a'],'key2':['one','two','one','two','one'],'data1':np.random.randn(5),'data2':np.random.randn(5)})
2.1 group函數(shù)
分組groupby Pandas中最為常用和有效的分組函數(shù)。
1)按列分組
注意以下使用groupby()函數(shù)生成的group1是一個(gè)中間分組變量腕让,為GroupBy類型孤钦。
group1 = df.groupby('key1')
group2 = df.groupby(['key1','key2'])
使用推導(dǎo)式[x for x in group1]可顯示分組內(nèi)容。
[x for x in group1]
[('a', data1 data2 key1 key2
0 1.830651 0.407903 a one
1 -0.973132 -0.056084 a two
4 -1.069184 0.043338 a one), ('b', data1 data2 key1 key2
2 -0.477718 -1.488174 b one
3 -0.227680 -0.825671 b two)]
在分組group1纯丸、group2上可以應(yīng)用size()偏形、sum()、count()等統(tǒng)計(jì)函數(shù)觉鼻,能分別統(tǒng)計(jì)分組數(shù)量俊扭、不同列的分組和、不同列的分組數(shù)量坠陈。
group1.size()
key1
a 3
b 2
dtype: int64
group1.sum()
對(duì)于分組的某一列或者多個(gè)列统扳,應(yīng)用agg(func)可以對(duì)分組后的數(shù)據(jù)應(yīng)用func函數(shù)。例如:用group1['data1'].agg('mean')對(duì)分組后的’data1’列求均值畅姊。當(dāng)然也可以推廣到同時(shí)作用于多個(gè)列和使用多個(gè)函數(shù)上。
group1['data1'].agg(['mean','sum'])
2.2 透視表pivot_table
pivot_table可以產(chǎn)生類似于excel數(shù)據(jù)透視表的結(jié)果吹由,相當(dāng)?shù)闹庇^若未。其中參數(shù)index指定“行”鍵,columns指定“列”鍵倾鲫。
pd.pivot_table(df, index = 'key1', columns= 'key2')
2.3 交叉表crosstab
交叉表crosstab 可以按照指定的行和列統(tǒng)計(jì)分組頻數(shù)粗合,用起來非常方便;當(dāng)然同樣的功能也可采用groupby實(shí)現(xiàn)乌昔。
pd.crosstab(df.key1,df.key2, margins=True)
3. 總結(jié)
最近在學(xué)習(xí)《利用Python進(jìn)行數(shù)據(jù)分析》隙疚,會(huì)把遇到的問題和學(xué)習(xí)到的知識(shí)寫出來,希望不要棄坑磕道。