一文看懂pandas的透視表pivot_table一、概述1.1 什么是透視表?透視表是一種可以對(duì)數(shù)據(jù)動(dòng)態(tài)排布并且分類(lèi)匯總的表格格式。或許大多數(shù)人都在Excel使用過(guò)數(shù)據(jù)透視表,也體會(huì)到它的強(qiáng)大功能,而在pandas中它被稱(chēng)作pivot_table。 1.2 為什么要使用pivot_table?
二、如何使用pivot_table首先讀取數(shù)據(jù),數(shù)據(jù)集是火箭隊(duì)當(dāng)家球星James Harden某一賽季比賽數(shù)據(jù)作為數(shù)據(jù)集進(jìn)行講解。數(shù)據(jù)地址。 先看一下官方文檔中pivot_table的函數(shù)體:pandas.pivot_table - pandas 0.21.0 documentation pivot_table(data, values=None, index=None, columns=None,aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All') pivot_table有四個(gè)最重要的參數(shù)index、values、columns、aggfunc,本文以這四個(gè)參數(shù)為中心講解pivot操作是如何進(jìn)行。 2.1 讀取數(shù)據(jù)
數(shù)據(jù)格式如下: 2.2 Index每個(gè)pivot_table必須擁有一個(gè)index,如果想查看哈登對(duì)陣每個(gè)隊(duì)伍的得分,首先我們將對(duì)手設(shè)置為index:
對(duì)手成為了第一層索引,還想看看對(duì)陣同一對(duì)手在不同主客場(chǎng)下的數(shù)據(jù),試著將對(duì)手與勝負(fù)與主客場(chǎng)都設(shè)置為index,其實(shí)就變成為了兩層索引
試著交換下它們的順序,數(shù)據(jù)結(jié)果一樣:
看完上面幾個(gè)操作,Index就是層次字段,要通過(guò)透視表獲取什么信息就按照相應(yīng)的順序設(shè)置字段,所以在進(jìn)行pivot之前你也需要足夠了解你的數(shù)據(jù)。 2.3 Values通過(guò)上面的操作,我們獲取了james harden在對(duì)陣對(duì)手時(shí)的所有數(shù)據(jù),而Values可以對(duì)需要的計(jì)算數(shù)據(jù)進(jìn)行篩選,如果我們只需要james harden在主客場(chǎng)和不同勝負(fù)情況下的得分、籃板與助攻三項(xiàng)數(shù)據(jù):
2.4 Aggfuncaggfunc參數(shù)可以設(shè)置我們對(duì)數(shù)據(jù)聚合時(shí)進(jìn)行的函數(shù)操作。 當(dāng)我們未設(shè)置aggfunc時(shí),它默認(rèn)aggfunc='mean'計(jì)算均值。我們還想要獲得james harden在主客場(chǎng)和不同勝負(fù)情況下的總得分、總籃板、總助攻時(shí):
2.5 ColumnsColumns類(lèi)似Index可以設(shè)置列層次字段,它不是一個(gè)必要參數(shù),作為一種分割數(shù)據(jù)的可選方式。
現(xiàn)在我們已經(jīng)把關(guān)鍵參數(shù)都介紹了一遍,下面是一個(gè)綜合的例子:
結(jié)果如下:
aggfunc也可以使用dict類(lèi)型,如果dict中的內(nèi)容與values不匹配時(shí),以dict中為準(zhǔn)。 table=pd.pivot_table(df,index=[u'對(duì)手',u'勝負(fù)'],columns=[u'主客場(chǎng)'],values=[u'得分',u'助攻',u'籃板'],aggfunc={u'得分':np.mean, u'助攻':[min, max, np.mean]},fill_value=0) 結(jié)果就是助攻求min,max和mean,得分求mean,而籃板沒(méi)有顯示。 |
|