python循环统计时间_Python数据处理,pandas+内置库轻松解决高难度数据需求

dafb63a61144bc03ed6c8d8b27ab0f92.png

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

转发本文并私信我"python",即可获得Python资料以及更多系列文章(持续更新的)

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

前言

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


问题

现有一份成绩表:

ee84a1fe6c13aa974ea521c7ffba7593.png
  • 要求把以上各学生分成10个组,让每组的平均分尽可能接近
  • 汇总输出各个组的信息(有什么人,平均分多少)
  • 输出分组的组间差异信息(就简单标准差即可)

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

  • 按分数,把数据做一次升序排序
  • 生成一新列,值为从 0-9(共10个数字) 的循环数列
  • 按循环数列分组,即可得到结果

5fa04fb625ad497b0771cdb7cb609e91.png

Excel 的做法

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

8ab2b9cb1c9cbea949778ee56cd17064.png
  • 排序使用 Excel 内置功能,不详细讲解
  • 输出循环数列,可以用函数公式,但这里当然用 Excel 的内置功能即可,先得到一列0-9(先输入0、1,再下拉即可),然后把这0-9的列复制粘贴到C列中即可
  • 后面的分组,统计得到结果,就不要麻烦 Excel 了,你也会烦死

pandas 中的对应实现

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

547518bc71071eaa537f5fcfee8a0080.png
  • 行1-5:自定义函数,用于生产循环数列
  • 参数 end_key 指定数列的结束值,x_len 指定最终结果的数列长度
  • 行2:需要使用 itertools 库,这里导入此库
  • 行3:itertools.cycle 用于循环获取数据,我们给他一个数字序列(使用 range 生成),cycle 方法会不断从里面循环获取出元素
  • 注意:千万不要直接把 cycle 方法转为实际序列,否则会产生死循环
  • 行4:对刚刚得到的循环数列做切片
  • 行5:转换成 list
  • 行8:调用这个自定义函数看看效果

185df145a7404810f2a2d49b74f8f987.png

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

15bf9f5ae54c50154094699c2080d92b.png
  • 行1:加载数据
  • 行2:调用之前定义的函数,获取分组依据
  • 行4-10:按分数排序 + 分组统计结果
  • 行8:对每个组中的人名(name) 串在一起(','.join) ,同时求个数(count)
  • 行12:修改表头
  • 行15:把分组结果输出到工作表"分组信息"
  • 行16:对分组结果输出一个统计信息到工作表"组差异"

排序、分组、汇总、统计到输出,就是这么简单直观。 pandas 在数据处理中的快速、便捷,体现得一览无遗!

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值