dask - 简单的 Dask 频率计数
问题描述
我想做一个频率计数。想象一下这张人和他们的年龄的名单:
IN [110]: b = db.from_sequence([('alex', 31), ('cassee', 31), ('Wes', 25), ('Allison', 35)])
In [111]: b.map(lambda x: (x[1], 1))\
.foldby(lambda x: x[0], lambda total,x: total[1]+x[1]).compute()
Out[111]: [(31, 2), (25, (25, 1)), (35, (35, 1))]
第一个元组看起来不错(31, 2)
,意味着出现了 2 次年龄 31。但是,接下来的两个元组的格式很奇怪。我希望输出是频率计数:[(31, 2), (25, 1), (35, 1)]
解决方案
您想要的调用如下:
b.pluck(1).frequencies().compute()
pluck
从每个元素中选择“年龄”的工作。frequencies
顾名思义:)
你也可以通过其他方式做到这一点:
b.foldby(1, lambda x, y: x + 1, 0).compute()
意思是,使用元素 1 进行分组,并在每个组内将每个元素的值加 1,从 0 开始;
from operator import add
from collections import Counter
b.fold(lambda x, y: x + Counter([y[1]]), add, initial=Counter()).compute()
这解释起来相当复杂......
推荐阅读
- html - 如何向上增加对象的大小并保持其形状?
- sql - 如何在 Access 中比较具有 Null 值的字段
- excel - 是否可以使用算术公式在 Excel 中用作单元格引用(没有 VBA)?
- oracle - 创建以下过程时不断出现编译错误
- java - 在 Eclipse RCP 中注入单例 OSGi 声明式服务
- java - 布局充气它在 onlick 功能中不起作用
- c# - OnPost() 没有达到 .NET Core 3.0
- javascript - 使用 JavaScript 生成 Django HTML 模板
- python - 如何在芹菜中创建多个先进先出队列?
- angular - 在 Ionic App 中每次删除后更新 ion 项