在Python中分箱频率分布

时间:2013-03-29 04:28:02

标签: python numpy histogram

我有两个列表 value freq 中的数据,如下所示:

value freq
1      2
2      1
3      3
6      2
7      3
8      3
....

我希望输出为

bin freq
1-3   6
4-6   2
7-9   6
...

我可以编写几行代码来执行此操作。但是,我在查看标准python或Numpy中是否有构建函数?当你在数组/列表中给出重复数据时,我找到了解决方案,即它们还没有被分组到频率表中(例如 d= [1,1,2,3,3,3,6,6,7,7,7,8,8,8,...]。但是,在这种情况下我找不到答案。我不想首先将我的数据转换为单个扩展列表,如d,然后使用直方图函数。

3 个答案:

答案 0 :(得分:9)

import numpy as np
values = [1,2,3,6,7,8]
freqs = [2,1,3,2,3,3]

hist, _ = np.histogram(values, bins=[1, 4, 7, 10], weights=freqs)
print hist

输出:

[6 2 6]

答案 1 :(得分:0)

你可以试试这个:

import collections
d=[1,1,2,3,3,3,6,6,7,7,7,8,8,8]
collections.Counter([i-i%3+3 for i in d])

它会生成一个包含你想要的词典。

答案 2 :(得分:0)

  

当你在数组/列表中给出重复数据

时,我找到了解决方案

您没有说明解决方案是什么,但如果它支持使用迭代器,您可以生成它,而不是创建整个列表:

导入itertools

values = [1,2,3,6]
freqs =  [2,1,3,2]

v_iter = itertools.chain(*[ itertools.repeat(v,f) for v, f in zip(values, freqs) ])

#for x in v_iter:
#    print x

your_solution(v_iter)