简单的频率计数

时间:2018-10-17 22:03:52

标签: 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)]

1 个答案:

答案 0 :(得分: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()

这很难解释...