像excel透視表一樣使用pandas透視函數(shù)

習(xí)慣了Excel里面的透視表拖拽方式,在Python中的pandas怎么能方便使用透視函數(shù)呢,有時(shí)可能會(huì)感到困惑,但是Excel中的透視表功能,pandas基本都能實(shí)現(xiàn),下面進(jìn)行詳細(xì)介紹

生成透視表函數(shù)

pd.pivot_table(data,values=None,index=None,columns=None,aggfunc='mean',fill_value=None,margins=False,dropna=True,margins_name='All')
詳細(xì)介紹每個(gè)參數(shù):
data:為了生成透視表需要用到的數(shù)據(jù)框,對(duì)應(yīng)Excel里面的需要用到的區(qū)域
values:對(duì)那個(gè)字段進(jìn)行值計(jì)算,對(duì)應(yīng)Excel里面需要把字段拖拽到值的地方
index:根據(jù)字段進(jìn)行匯總,生成每行一個(gè)分類,對(duì)應(yīng)Excel里面需要把字段拖拽到行的地方
columns:根據(jù)字段進(jìn)行匯總,生成每列一個(gè)分類,對(duì)應(yīng)Excel里面需要把字段拖拽到列的地方
aggfunc:對(duì)值字段進(jìn)行那種計(jì)算,計(jì)數(shù)、求和、平均,對(duì)應(yīng)Excel里面對(duì)值字段設(shè)置里面的值匯總方式選擇
fill_value:行分類與列分類交叉值為空的地方用什么值填充
margins:是否對(duì)行列顯示匯總,對(duì)應(yīng)Excel里面透視表下面設(shè)計(jì)選型卡,總計(jì)是否對(duì)行和列啟用
dropna:是否包括原始引用數(shù)據(jù)里面都為NAN的列
margins_name:可以給總計(jì)的列起別名

行、列、值對(duì)應(yīng)

aggfunc對(duì)應(yīng)

示例

  • 導(dǎo)入數(shù)據(jù)
import pandas as pd
data=pd.read_excel('111.xlsx',sheet_name='python')
data
data
  • 創(chuàng)建數(shù)據(jù)透視表
pd.pivot_table(data,values =['數(shù)值1','數(shù)值2'],index=['字段1','字段2','字段3'],aggfunc='sum')
數(shù)據(jù)透視表
  • 查看生成的數(shù)據(jù)透視表是什么
    可以看到生成的數(shù)據(jù)透視表還是dataframe數(shù)據(jù)框,那么數(shù)據(jù)框能用的一切方法同樣適用于生成的這個(gè)透視表
data_result=pd.pivot_table(data,values =['數(shù)值1','數(shù)值2'],
                           index=['字段1','字段2','字段3'],
                           aggfunc='sum')
type(data_result)
數(shù)據(jù)透視表是什么類型
  • 添加行列總計(jì)
#添加margins參數(shù)
pd.pivot_table(data,values =['數(shù)值1','數(shù)值2'],
                    index=['字段1','字段2'],
                    columns=['字段3'],
                    aggfunc='sum',
                    margins=True)
添加行列總計(jì)
  • 轉(zhuǎn)換成正常的數(shù)據(jù)框
    重置索引轉(zhuǎn)換成正常的數(shù)據(jù)框樣式
data_result=pd.pivot_table(data,values =['數(shù)值1','數(shù)值2'],
                           index=['字段1','字段2','字段3'],
                           aggfunc='sum').reset_index()
重置索引
  • 生成帶列分類的透視表
pd.pivot_table(data,values =['數(shù)值1','數(shù)值2'],
                    index=['字段1','字段2'],
                    columns=['字段3'],
                    aggfunc='sum')
帶列分類數(shù)據(jù)框
  • 不同層級(jí)之間的調(diào)換
    比如上面生成帶列字段分類的透視表,需要把字段3(f、t)的一行和上面數(shù)值1、數(shù)值2的一行進(jìn)行調(diào)換
#先進(jìn)行一下賦值
data_result=pd.pivot_table(data,values =['數(shù)值1','數(shù)值2'],
                    index=['字段1','字段2'],
                    columns=['字段3'],
                    aggfunc='sum')
#修改列的名稱
data_result.columns.names=['一','二']

#進(jìn)行調(diào)換
data_result.swaplevel('二','一',axis=1)

#為了對(duì)相同內(nèi)容放到一塊,進(jìn)行排序
data_result.swaplevel('二','一',axis=1).sort_index(level=0,axis=1)
不同層級(jí)之間調(diào)換
  • 根據(jù)一列進(jìn)行排序
#賦值操作
data_result=data_result.swaplevel('二','一',axis=1).sort_index(level=0,axis=1)

#進(jìn)行排序
data_result.sort_values(by=[('f','數(shù)值2')],axis=0)
數(shù)值排序

以上是自己實(shí)踐中遇到的一些點(diǎn),分享出來供大家參考學(xué)習(xí),歡迎關(guān)注本簡書號(hào)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。