本節學習數據透視表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')
對金額進行分組,而後再來透視表(看了就懂了):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值。3d
進行多個值的計算,並指定計算方法。 若是有須要,還能夠增長計算值。
爲了方便查看每一個參數的內容,因此換行了。excel
df.pivot_table(index =[ 'dep',amount], values = ['allbones','oldrate'], aggfunc = {'allbones':[np.sum,len,np.mean], #一個字段進行3中運算 'oldrate':np.sum})
df.pivot_table(index =[ 'dep',amount], values = ['allbones','oldrate'], aggfunc = [np.sum,np.mean,len], margins = True) #margins默認爲false,改爲True後在表的最後顯示彙總
還沒找到方法😁,如今這些差很少夠用了,就這樣,煮飯去了,拜拜。code
(第3種方法更好用,第1 個沒有成功,第二、3是OK的)
在建立透視表後,想用建立的透視表做爲一個新的表,用新的表toushi作處理。視頻
爲了實驗,全部把toushi1 = toushi,在toushi1,嘗試了幾種方法:
一、把toushi1中的索引列複製爲新的列,而後對新的列用str.split()進行拆分,是能拆分,但想取第1個值的話,返回的結果是NaN,由於它默認的值是NaN,username還是index。故此方法失敗。
二、搜索到的另一種方法,附上連接:連接
#把索引列變爲正常的列 toushi3.reset_index(inplace = True) toushi3
三、這種方法也可把多索引列變爲列:pandas官方文檔
toushi2.reset_index(level=['username','name'])
能夠用透視表實現最大值和最小值,在後期處理數據的時候可能會有用。(在秦路老師的RFM中,也用到了計算只交易一次客戶的數量,用透視表也能夠篩選。)
pd.pivot_table(data,index = 'username', values =['times','amount'], aggfunc={'times':[min,max], 'amount':[np.sum,len]})
最後一個問題歸根是索引的問題,在第3章的第6節,有講到索引的具體方法,但沒有記住,當時也沒想到在透視表的時候能夠用,
其實在搜索python函數處理數據時,函數在剛開始的時候就已經搜索到了,但不明白函數中參數的配置,因此忽略的快的方法,反而是花費了更多的時間去尋找代替的方法。下次搜索到以後先看文檔!!!