數據科學 第 3 章 10 數據透視表

本節學習數據透視表html

引用激勵數據,鏈接數據庫jili表,jili這幾個太難打了,下文用df表明激勵數據(代碼省略)
以前在excel中用爛了的透視表,終於用python來實現了,其實主要是講pivot_table裏面的參數怎麼使用,但書中講的不是詳細,仍是要本身找一些文檔或者視頻輔助學習。python

pivot_table 官方文檔鏈接
像其餘函數同樣,官方文檔中的參數有不少,具體以下:
df.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')數據庫

寫在前面,若是要對透視表中的字段進行計數,有時候用count會報錯,能夠用len函數

實例運用:學習

一、簡單版透視表

df.pivot_table(index='dep',aggfunc='sum')
#上面以部門爲索引,下面有二級索引,部門、小組。  不知道是否是叫二級索引,暫且這麼命名吧
df.pivot_table(index=['dep','group'],aggfunc='sum')

clipboard.png

二、升級版透視表:金額分組

對金額進行分組,而後再來透視表(看了就懂了):spa

#金額分組
amount = pd.cut(df['allbones'],[0,1000,5000,10000,20000,40000])
df.pivot_table(index=['dep',amount],values= 'allbones', aggfunc='count')

由於指定了值values = 'allbones',因此結果中只包含allbones的計算結果,若是不指定values,則會像上面同樣計算知足條件的全部字段的count值。
clipboard.png3d

三、再升級版:多個計算方法

進行多個值的計算,並指定計算方法。 若是有須要,還能夠增長計算值。
爲了方便查看每一個參數的內容,因此換行了。excel

df.pivot_table(index =[ 'dep',amount],
              values = ['allbones','oldrate'],
              aggfunc = {'allbones':[np.sum,len,np.mean],  #一個字段進行3中運算
                         'oldrate':np.sum})

clipboard.png

四、在透視表最後加一個彙總

df.pivot_table(index =[ 'dep',amount],
              values = ['allbones','oldrate'],
              aggfunc = [np.sum,np.mean,len],
              margins = True)    #margins默認爲false,改爲True後在表的最後顯示彙總

五、大boss版,在每一個部門下面進行分類彙總:不會

還沒找到方法😁,如今這些差很少夠用了,就這樣,煮飯去了,拜拜。code

六、加蛋版:把透視表的索引列變爲正常的列

(第3種方法更好用,第1 個沒有成功,第二、3是OK的)
在建立透視表後,想用建立的透視表做爲一個新的表,用新的表toushi作處理。
clipboard.png視頻

爲了實驗,全部把toushi1 = toushi,在toushi1,嘗試了幾種方法:
一、把toushi1中的索引列複製爲新的列,而後對新的列用str.split()進行拆分,是能拆分,但想取第1個值的話,返回的結果是NaN,由於它默認的值是NaN,username還是index。故此方法失敗。
clipboard.png
二、搜索到的另一種方法,附上連接:連接

#把索引列變爲正常的列
toushi3.reset_index(inplace = True)
toushi3

clipboard.png

三、這種方法也可把多索引列變爲列:pandas官方文檔

toushi2.reset_index(level=['username','name'])

clipboard.png

對第3條的補充:計算時間的最大最小值

能夠用透視表實現最大值和最小值,在後期處理數據的時候可能會有用。(在秦路老師的RFM中,也用到了計算只交易一次客戶的數量,用透視表也能夠篩選。)

pd.pivot_table(data,index = 'username',
               values =['times','amount'],
               aggfunc={'times':[min,max],
                        'amount':[np.sum,len]})

clipboard.png

小感悟:

最後一個問題歸根是索引的問題,在第3章的第6節,有講到索引的具體方法,但沒有記住,當時也沒想到在透視表的時候能夠用,

其實在搜索python函數處理數據時,函數在剛開始的時候就已經搜索到了,但不明白函數中參數的配置,因此忽略的快的方法,反而是花費了更多的時間去尋找代替的方法。下次搜索到以後先看文檔!!!

相關文章
相關標籤/搜索