AI智能
改变未来

跟小白学Python数据分析——分组分析

小白:Mr.林,基本统计分析我已经会了,现在我想按性别分组统计下用户数,以及按性别分组统计用户的平均年龄,那我该如何做呢?
Mr.林:在Pandas中,对数据进行分组统计需要使用groupby函数。
我们继续使用导入使用的案例数据进行学习,输入以下代码:

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

Mr.林:执行后,在变量浏览窗口中就可以看到刚导入的data变量了,双击打开data变量,就可以得到下面这张表。

先来统计按性别分组的用户数,输入以下代码

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

得到的结果如下所示

1           id  reg_date  id_num  birthday    age2gender3女        4316      4316    4316      4316   43164男       54785     54785   54785     54785  54785

然后再来统计按性别分组的平均值,输入以下代码

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

得到的结果如下所示

1                   id        age2gender3女       149779.770853  30.3924934男       149833.467829  26.979629

小白:我发现了一个问题,它又根据所有能统计的列都统计了结果。如果我只是仅仅希望按性别分组统计下用户数,以及按性别分组统计用户的平均年龄,那我该如何做呢?
Mr.林:这个时候可以使用groupby与agg函数组合进行统计。
还是先来按性别分组统计id的数量,也就是用户数,输入以下代码
1data.groupby(\’gender\’)[\’id\’].agg(\’count\’)
执行后,得到的结果如下所示

1gender2女     43163男    54785

然后再来按性别分组统计年龄的平均值,输入以下代码

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

执行后,得到的结果如下所示

1gender2女    30.3924933男    26.979629

小白:啊哈!棒棒哒!
小白突然又想到一个问题:那我能不能在性别分组的基础上,再加入一个分组列,比如将注册日期加到分组列里?
Mr.林:这可以有,只要在gender前面再加入reg_date,如果还有其他分组列可以继续加入,用逗号分隔即可,输入以下代码
1data.groupby([\’reg_date\’,\’gender\’])[\’id\’].agg(\’count\’)
执行后,得到的结果如下所示

1reg_date   gender22011/1/1   男          1032011/1/10  女           64           男         16052011/1/11  女          156           男         16572011/1/12  女          198           男         13292011/1/13  女          1610           男         167112011/1/14  女          1312           男         19413.........................

小白继续追问道:那我能不能对多个列进行统计呢?现在只对id列进行统计,如果再把age列加进来,可以么?
Mr.林:这个同样可以有,不过如果还是计数的话,对id、age两列统计的结果是一样的,我们换成平均值统计试试,输入以下代码
1data.groupby([\’reg_date\’,\’gender\’])[\’id\’,\’age\’].agg(\’mean\’)
执行后,得到的结果如下所示

1                             id        age2reg_date  gender32011/1/1  男       100008.600000  29.20000042011/1/10 女       101276.500000  36.3333335          男       101295.262500  26.86250062011/1/11 女       101617.400000  31.4000007          男       101590.054545  26.63636482011/1/12 女       101897.157895  28.1578959          男       101874.174242  26.500000102011/1/13 女       102122.625000  30.56250011          男       102153.694611  27.101796122011/1/14 女       102461.153846  32.38461513          男       102482.067010  26.97422714.........................

小白:太棒了,我还有个疑问,groupby那里跟后面id、age的中括号是什么意思呀?
Mr.林:中括号代表列表的意思,下次再详细告诉你,今天就到这,小白你回去要多多练习,多敲代码。

如果你喜欢本文,可以点击右下角在看
如果你在跟着学习,请在留言区留言:打卡
如果你刚看到本文,可以查看本系列历史文章跟着学习:
跟小白学Python数据分析——Anaconda安装
跟小白学Python数据分析——使用spyder
跟小白学Python数据分析——数据导入1
跟小白学Python数据分析——数据导入2
跟小白学Python数据分析——描述性统计分析

长按识别下方二维码,并关注公众号
回复“DR”获取案例数据

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 跟小白学Python数据分析——分组分析