用pandas快速统计学生年龄班级等分组信息

混江龙づ霸主 提交于 2020-04-24 16:46:22

最近收到一个求助邮件,他的需求如下:

我是小学的一名统计员,因长期做统计工作,近期,自学一点python,但如何把excel中的8位数出生日期转成年龄,一直做不好,现请您帮忙一下,不知能否帮!

这个问题其实比较简单,做出来的最终形式如下:

file

主要涉及格式转换和分组统计的需求,那么我们就开始一步一步的完成这一次的任务。

1、读入excel文件

import pandas as pd
file_name = r'学生信息表.xlsx'
data = pd.read_excel(file_name)
data

输出:

file

2、处理出生日期,转化为时间格式

这次我们用pandas自带的to_datetime函数,好用快捷。

data['出生日期'] = pd.to_datetime(data['出生日期'],format='%Y%m%d')

3、增加一列年龄

引入datetime包,根据当前时间的year减去出生日期得到。

import datetime as dt
now = dt.datetime.today().year
data['周岁'] = now - data['出生日期'].dt.year

输出:

file

4、对周岁、性别同时分组

熟悉教程的小伙伴知道,这一期的分组内容其实可以用pandas的透视表pivot_table函数解决。

这次我们就用另一种方法:groupby函数同样能搞定。

#开始分组统计
age = data.groupby(['周岁','性别'])
age_group  = age.agg({'学生姓名':'count'}).T

输出: file

5、如果需要求和数据

a.我们可以先对所有数据进行分组统计一次

b.再单独对女生数据统计一次

c.最后把两次的统计数据合并起来

合并分组

age_single = data.groupby(['周岁'])
age_single_group = age_single.agg({'学生姓名':'count'}).T
age_single_group.index = ['合计']

仅女生数据

age_single_female = data[data['性别'] == '女'].groupby(['周岁'])
​
age_single_female_group = age_single_female.agg({'学生姓名':'count'}).T
age_single_female_group.index = ['仅女生']

合并数据

age_union = pd.concat([age_single_group,age_single_female_group],join='outer')
age_union.fillna(0)

输出:

file

这样就完成了年级的分组统计,其他的按年级分组,或者地区分组也是类似的。是不是一步步写过来感觉pandas特别好用,特别简单。

文源网络,仅供学习之用,侵删。

在学习Python的道路上肯定会遇见困难,别慌,我这里有一套学习资料,包含40+本电子书,800+个教学视频,涉及Python基础、爬虫、框架、数据分析、机器学习等,不怕你学不会! https://shimo.im/docs/JWCghr8prjCVCxxK/ 《Python学习资料》

关注公众号【Python圈子】,优质文章每日送达。

file

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!