再見,Excel數(shù)據(jù)透視表;你好,pd.pivot_table
導讀
Excel作為Office常用辦公軟件之一,其在一名數(shù)據(jù)分析師的工作日常中也占有一定地位,比如個人就常常傾向于依賴Excel完成簡單的數(shù)據(jù)處理和可視化作圖,其中數(shù)據(jù)處理部分則主要是運用內置函數(shù)+數(shù)據(jù)透視表兩大部分。
Excel數(shù)據(jù)透視表雖好,但在pandas面前它也有其不香的一面!


選擇Excel菜單欄中插入數(shù)據(jù)透視表選項卡

分別拖動目標字段到相應行列位置,設置統(tǒng)計函數(shù)為求和

得到統(tǒng)計好的數(shù)據(jù)透視表結果

至此,我們可以發(fā)現(xiàn)數(shù)據(jù)透視表中實際存在4個重要的設置項:
行字段
列字段
統(tǒng)計字段
統(tǒng)計方式(聚合函數(shù))
值得指出的是,以上4個要素每一個都可以不唯一,例如可以拖動多個字段到行/列字段中形成二級索引,也可完成對不同字段的統(tǒng)計,以及拖動相同字段設置不同統(tǒng)計方法實現(xiàn)多種聚合。
values?: 待聚合的列名
index?:?用于放入透視表結果中的行索引列名
columns?:?用于放入透視表結果中列索引列名
aggfunc :?聚合統(tǒng)計函數(shù),可以是單個函數(shù),也可以是函數(shù)列表,還可以是字典格式,默認聚合函數(shù)為均值。當該參數(shù)傳入字典格式時,key為列名,value為聚合函數(shù)值,此時values參數(shù)無效
fill_value : 缺失值填充值,默認為None,即不對缺失值做任何處理。注意這里的缺失值是指透視后結果中可能存在的缺失值,而非透視前的原表中缺失值
margins?: 指定是否加入?yún)R總列,布爾值,默認為False,體現(xiàn)為Excel透視表中的行小計和列小計
margins_name?:?匯總列的列名,與上一個參數(shù)配套使用,默認為'All',當margins為False時,該參數(shù)無作用
dropna :?是否丟棄匯總結果中全為NaN的行或列,默認為True。例如,行有3個取值,列有3個取值,經(jīng)過透視表重組后理論上最多有3×3=9個結果,但實際可能只有3×2=6個非空值,其中全為空的一列默認舍棄
observed : 適用于分類變量,一般無需關注。
其中前4個參數(shù)是核心參數(shù)。





實際上,上述效果就相當于執(zhí)行完pivot_table的基礎上再加一個fillna()函數(shù)即可。
pivot僅適用于數(shù)據(jù)變形,即由長表變?yōu)閷挶?,相當于對?shù)據(jù)進行了重組;而pivot_table除了數(shù)據(jù)重組外,還有一個額外的效果,即數(shù)據(jù)聚合,即若重組后對應的行標簽和列標簽下取值不唯一,此時按指定方法進行聚合;換言之,pivot能干的事情,pivot_table都能干,反之則不然。

pivot由于僅涉及行列重組和變形,所以一般更適用于分類變量;而pivot_table在重組的基礎上還增加了聚合統(tǒng)計的過程,所以一般更適用于數(shù)值型變量,但對于支持分類變量統(tǒng)計的聚合函數(shù)(例如count),則pivot_table也可適用。


相關閱讀:
