跟小白學Python數據分析——分組分析

小白:Mr.林,基本統計分析我已經會了,如今我想按性別分組統計下用戶數,以及按性別分組統計用戶的平均年齡,那我該如何作呢?
Mr.林:在Pandas中,對數據進行分組統計須要使用groupby函數。
咱們繼續使用導入使用的案例數據進行學習,輸入如下代碼:python

1import pandas
2data = pandas.read_csv(
3'D:/D/data.csv',
4 engine='python',
5 encoding='utf8'
6)

Mr.林:執行後,在變量瀏覽窗口中就能夠看到剛導入的data變量了,雙擊打開data變量,就能夠獲得下面這張表。
跟小白學Python數據分析——分組分析
先來統計按性別分組的用戶數,輸入如下代碼數組

1data.groupby('gender').count()

獲得的結果以下所示ide

1           id  reg_date  id_num  birthday    age
2gender                                          
3女        4316      4316    4316      4316   4316
4男       54785     54785   54785     54785  54785

而後再來統計按性別分組的平均值,輸入如下代碼函數

1data.groupby('gender').mean()

獲得的結果以下所示學習

1                   id        age
2gender                          
3女       149779.770853  30.392493
4男       149833.467829  26.979629

小白:我發現了一個問題,它又根據全部能統計的列都統計告終果。若是我只是僅僅但願按性別分組統計下用戶數,以及按性別分組統計用戶的平均年齡,那我該如何作呢?
Mr.林:這個時候可使用groupby與agg函數組合進行統計。
仍是先來按性別分組統計id的數量,也就是用戶數,輸入如下代碼
1data.groupby('gender')['id'].agg('count')
執行後,獲得的結果以下所示code

1gender
2女     4316
3男    54785

而後再來按性別分組統計年齡的平均值,輸入如下代碼blog

1data.groupby('gender')['age'].agg('mean')

執行後,獲得的結果以下所示數據分析

1gender
2女    30.392493
3男    26.979629

小白:啊哈!棒棒噠!
小白忽然又想到一個問題:那我能不能在性別分組的基礎上,再加入一個分組列,好比將註冊日期加到分組列裏?
Mr.林:這能夠有,只要在gender前面再加入reg_date,若是還有其餘分組列能夠繼續加入,用逗號分隔便可,輸入如下代碼
1data.groupby(['reg_date','gender'])['id'].agg('count')
執行後,獲得的結果以下所示pandas

1reg_date   gender
 22011/1/1   男          10
 32011/1/10  女           6
 4           男         160
 52011/1/11  女          15
 6           男         165
 72011/1/12  女          19
 8           男         132
 92011/1/13  女          16
10           男         167
112011/1/14  女          13
12           男         194
13.........................

小白繼續追問道:那我能不能對多個列進行統計呢?如今只對id列進行統計,若是再把age列加進來,能夠麼?
Mr.林:這個一樣能夠有,不過若是仍是計數的話,對id、age兩列統計的結果是同樣的,咱們換成平均值統計試試,輸入如下代碼
1data.groupby(['reg_date','gender'])['id','age'].agg('mean')
執行後,獲得的結果以下所示it

1                             id        age
 2reg_date  gender                          
 32011/1/1  男       100008.600000  29.200000
 42011/1/10 女       101276.500000  36.333333
 5          男       101295.262500  26.862500
 62011/1/11 女       101617.400000  31.400000
 7          男       101590.054545  26.636364
 82011/1/12 女       101897.157895  28.157895
 9          男       101874.174242  26.500000
102011/1/13 女       102122.625000  30.562500
11          男       102153.694611  27.101796
122011/1/14 女       102461.153846  32.384615
13          男       102482.067010  26.974227
14.........................

小白:太棒了,我還有個疑問,groupby那裏跟後面id、age的中括號是什麼意思呀?
Mr.林:中括號表明列表的意思,下次再詳細告訴你,今天就到這,小白你回去要多多練習,多敲代碼。
跟小白學Python數據分析——分組分析

若是你喜歡本文,能夠點擊右下角在看
若是你在跟着學習,請在留言區留言:打卡
若是你剛看到本文,能夠查看本系列歷史文章跟着學習:
跟小白學Python數據分析——Anaconda安裝
跟小白學Python數據分析——使用spyder
跟小白學Python數據分析——數據導入1
跟小白學Python數據分析——數據導入2
跟小白學Python數據分析——描述性統計分析

長按識別下方二維碼,並關注公衆號
回覆「DR」獲取案例數據
跟小白學Python數據分析——分組分析

相關文章
相關標籤/搜索