Простой подсчет частоты Dask - PullRequest
0 голосов
/ 18 октября 2018

Я хочу сделать подсчет частоты.Представьте себе этот список людей и их возраст:

    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 голосов
/ 18 октября 2018

Требуется следующий вызов:

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()

, что довольно сложно объяснить ...

...