跟小白学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数据分析——分组分析

相关文章
相关标签/搜索