數(shù)據(jù)透視表數(shù)據(jù)透視表就是將數(shù)據(jù)的每一列作為輸入,輸出將數(shù)據(jù)不斷細分成多個維度累計信息的二維數(shù)據(jù)表,簡單來說,數(shù)據(jù)透視表更像是一種多維的GroupBy 累計操作。 示例數(shù)據(jù)本例使用了泰坦尼克號的乘客信息,這份數(shù)據(jù)包含性別(gender)、年齡(age)、船艙等級(class)和船票信息(fare paid)等等: import numpy as np import pandas as pd import seaborn as sns titanic = sns.load_dataset('titanic') titanic.head()
手工制作數(shù)據(jù)透視表可以使用之前學(xué)過的GroupBy 來手工制作數(shù)據(jù)透視表,比如我們要統(tǒng)計不同性別乘客的生還率: titanic.groupby('sex')[['survived']].mean()
可以看出有四分之三的女性被救,但只有五分之一的男性被救! 要是我們還想同時觀察不同性別與船艙等級的生還情況,根據(jù)GroupBy 的操作流程,可以先將船艙等級(class )與性別(sex )分組,然后選擇生還狀態(tài)(survived )列,應(yīng)用均值(mean )累計函數(shù),再將結(jié)果組合,最后通過unstack 來轉(zhuǎn)換多級索引: titanic.groupby(['sex', 'class'])['survived'].aggregate('mean').unstack()
這樣的代碼是不是看起來有些復(fù)雜?所以 Pandas 提供了pivot_table 方式來快速解決這種多維的累計分析任務(wù)。 數(shù)據(jù)透視表語法使用pivot_table 來實現(xiàn)上面的代碼: titanic.pivot_table('survived', index='sex', columns='class')
與GroupBy 方法相比,這樣的代碼可讀性更強,結(jié)果也完全一樣??梢园l(fā)現(xiàn)生還率最高的是船艙等級最高的女性,一等艙的女性幾乎全部生還,而三等艙男性的生還率僅為十分之一。 多級數(shù)據(jù)透視表還可以把年齡作為第三個維度,并用pd.cut 對年齡進行分段: age = pd.cut(titanic['age'], [0, 18, 80]) titanic.pivot_table('survived', ['sex', age], 'class')
用pd.qcut 會根據(jù)船票價格的頻率等分為兩份,把它加入數(shù)據(jù)透視表看看: fare = pd.qcut(titanic['fare'], 2) titanic.pivot_table('survived', ['sex', age], [fare, 'class'])
其他數(shù)據(jù)透視表選項DataFrame 的pivot_table 選項如下: # call signature as of Pandas 0.18 DataFrame.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')
aggfunc 用于設(shè)置累計函數(shù)類型,默認(rèn)是均值(還可以是'sum' , 'mean' , 'count' , 'min' , 'max' 等等,也可以用np.sum() , min() , sum() 等)。另外,可以通過字典為不同的列指定不同的累計函數(shù):
titanic.pivot_table(index='sex', columns='class', aggfunc={'survived':sum, 'fare':'mean'})
值得注意的是,上面的代碼省去了values 因為,在aggfunc 的字典中已經(jīng)指定了。 當(dāng)需要計算每一組的總數(shù)時,可使用magins 參數(shù): titanic.pivot_table('survived', index='sex', columns='class', margins=True)
magins 的標(biāo)簽可以通過margins_name 參數(shù)進行自定義,默認(rèn)值是All 。
筆記整理自《Python數(shù)據(jù)科學(xué)手冊》,本書的英文版以及一些資料已在Github開源(https://github.com/jakevdp/PythonDataScienceHandbook ),中文版可點擊下方鏈接購買~
|