習(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ì)的列起別名
示例
- 導(dǎo)入數(shù)據(jù)
import pandas as pd
data=pd.read_excel('111.xlsx',sheet_name='python')
data
- 創(chuàng)建數(shù)據(jù)透視表
pd.pivot_table(data,values =['數(shù)值1','數(shù)值2'],index=['字段1','字段2','字段3'],aggfunc='sum')
-
查看生成的數(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)
- 添加行列總計(jì)
#添加margins參數(shù)
pd.pivot_table(data,values =['數(shù)值1','數(shù)值2'],
index=['字段1','字段2'],
columns=['字段3'],
aggfunc='sum',
margins=True)
-
轉(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')
-
不同層級(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ù)一列進(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í)踐中遇到的一些點(diǎn),分享出來供大家參考學(xué)習(xí),歡迎關(guān)注本簡書號(hào)