盘一盘 Python 的 itertools:数据分组

开发
分组处理数据,你只会使用 pandas? 那你就错了。其实不借助第三方库,我们也可以轻松实现数据分组。

分组处理数据,你只会使用 pandas? 那你就错了。其实不借助第三方库,我们也可以轻松实现数据分组。

今天内容:

  • 使用字典做数据分组
  • 使用 itertools 的 groupby 实现数据分组
  • 如何封装函数,使其更具通用性

分组

字典是python中非常常用的一种数据结构。我们可以用字典来实现数据分组。

比如,我们有这样一个列表:

people_list = [
    {'姓名': '张三', '性别': '男', '年龄': '25'},
    {'姓名': '李四', '性别': '女', '年龄': '30'},
    {'姓名': '王五', '性别': '男', '年龄': '22'},
    {'姓名': '赵六', '性别': '女', '年龄': '28'},
    {'姓名': '周六', '性别': '女', '年龄': '26'},
    {'姓名': '陈七', '性别': '男', '年龄': '24'},
    {'姓名': '杨八', '性别': '女', '年龄': '27'},
]

我们想按照性别分组,统计平级年龄和人数。

使用字典的实现方式:

结果:

现在结果字典有两项数据(男性和女性),分别对应着两个列表(里面就是该性别的数据,是一个个字典)。

上面代码,可以使用 defaultdict 改进:

行21: 当访问一个不存在的键时,defaultdict 会自动创建一个空列表,并返回它。

如果不想使用字典,而是想使用 itertools 的 groupby 实现,可以这样:

行15:分组前对数据做排序才行

封装函数

现在已经对数据进行了分组,所谓的分组统计(平级年龄和人数),只不过是对每个性别的列表进行遍历,统计每个人的年龄,然后求和。

但统计处理多种多样,为此我们可以封装成通用的函数。

假设封装的函数叫 group_by ,看看我们期待的使用方式:

  • 行9:参数 by :指定分组的字段,也可以指定多个字段,比如 by=["性别", "年龄"] 。
  • 行9:参数 aggregate :指定聚合函数。

确定了使用方式,那么我们可以开始封装函数:

  • 行20-23:让参数 by 支持单个字符串或多列分组
  • 行29:再次遍历分组的结果,然后应用聚合函数
责任编辑:赵宁宁 来源: 数据大宇宙
相关推荐

2022-03-25 13:45:37

黑客网络攻击数据泄露

2025-01-08 14:34:58

2012-07-11 13:32:11

虚拟化

2020-06-05 15:48:26

网络安全技术漏洞

2024-01-08 08:30:30

接口线程模型

2024-07-10 10:04:48

2012-08-21 15:24:07

腾讯App

2015-03-02 11:23:51

2021-10-29 09:55:20

人工神经网络

2010-04-29 11:23:08

Apple

2015-09-23 11:43:00

小米副卡虚拟运营商

2012-07-25 11:29:41

2017-05-18 12:40:44

AlphaGoAI柯洁

2017-08-02 17:15:05

互联网

2023-12-18 14:31:51

技术大模型人机交互

2021-07-11 07:10:11

机械盘固态盘硬盘

2023-03-09 12:00:45

AI科学家

2017-09-15 09:25:07

2022-05-06 08:08:14

蓝盘机械硬盘紫盘
点赞
收藏

51CTO技术栈公众号