首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

懂Excel轻松入门Python数据分析包pandas:循环序列分组

此系列文章收录在公众号中:数据大宇宙 > 数据处理 >E-pd

> 经常听别人说 Python 在数据领域有多厉害,结果学了很长时间,连数据处理都麻烦得要死。后来才发现,原来不是 Python 数据处理厉害,而是他有数据分析神器—— pandas

前言

这次是一位小伙伴提出的实际问题,刚好使用 pandas 的解决思路上与 Excel 一致,因此写到这个系列中。

问题

现有一份成绩表:

- 要求把以上各学生分成10个组,让每组的平均分尽可能接近

- 汇总输出各个组的信息(有什么人,平均分多少)

- 输出分组的组间差异信息(就简单标准差即可)

这不是 IQ 题,这里直接给出一种比较直观的解决思路(不一定最优):

- 按分数,把数据做一次升序排序

- 生成一新列,值为从 0-9(共10个数字) 的循环数列

- 按循环数列分组,即可得到结果

Excel 的做法

按照惯例,先看看如果在 Excel 上是怎么得到结果(流程前2步):

- 排序使用 Excel 内置功能,不详细讲解

- 输出循环数列,可以用函数公式,但这里当然用 Excel 的内置功能即可,先得到一列0-9(先输入0、1,再下拉即可),然后把这0-9的列复制粘贴到C列中即可

- 后面的分组,统计得到结果,就不要麻烦 Excel 了,你也会烦死

pandas 中的对应实现

怎么样生成需求中的循环数列呢?pandas 上的确没有此操作,因为这实在太简单,本来 Python 就可以内置的库可以完成:

- 行1-5:自定义函数,用于生产循环数列

- 参数 end_key 指定数列的结束值,x_len 指定最终结果的数列长度

- 行2:需要使用 itertools 库,这里导入此库

- 行3:itertools.cycle 用于循环获取数据,我们给他一个数字序列(使用 range 生成),cycle 方法会不断从里面循环获取出元素

- 注意:千万不要直接把 cycle 方法转为实际序列,否则会产生死循环

- 行4:对刚刚得到的循环数列做切片

- 行5:转换成 list

- 行8:调用这个自定义函数看看效果

接下来是利用这个自定义函数生成分组依据的列,进行分组统计,得到结果:

- 行1:加载数据

- 行2:调用之前定义的函数,获取分组依据

- 行4-10:按分数排序 + 分组统计结果

- 行8:对每个组中的人名(name) 串在一起(','.join) ,同时求个数(count)

- 行12:修改表头

- 行15:把分组结果输出到工作表"分组信息"

- 行16:对分组结果输出一个统计信息到工作表"组差异"

排序、分组、汇总、统计到输出,就是这么简单直观。

pandas 在数据处理中的快速、便捷,体现得一览无遗!

更多 pandas 高级技巧,关注我的 pandas 专栏!

现在可以来看看生成的结果 Excel 文件:

- 这是"分组结果"

- 因为总人数为160,可以看到每组都是16人了

- 这是"组差异"

- 行3:平均每个组的分数为49.1

- 行4:每个组平均分平均差距只是1.86分,结果还可以接受

总结

本文重点:

- itertools 库中有许多相当实用的功能,值得学习

需要源码的小伙伴,公众号发送"数据处理"

觉得写得不错,点击右下方"在看"

如果希望从零开始学习 pandas ,那么可以看看我的 pandas 专栏。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200108A05T3100?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券