我想进行一次频率计数。想象一下这个人及其年龄列表:
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)]
答案 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()
这很难解释...