2013-03-29 2 views
4

У меня есть данные в двух списках значения и частоты так:Binning распределения частот в Python

 
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 
... 

я могу напишите несколько строк кода, чтобы сделать это. Тем не менее, я смотрю, есть ли функции builitin в стандартном python или Numpy? Я нашел решение, когда вам даны данные в массиве/списке с повторением, т. Е. Они еще не сгруппированы в частотную таблицу (например, d= [1,1,2,3,3,3,6,6,7,7,7,8,8,8,...]. Однако в этом случае я не смог найти ответы. Я не хочу преобразовывать свои данные в . одиночный расширенный список как d первой и использование функции гистограммы

ответ

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

он будет генерировать словарь с тем, что вы хотите

+0

м y данные - это гайка, поставляемая так, как вы ее взяли, но как два разных списка значений и частоты. Если он задан как d .. np.histogram works – DurgaDatta

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) 
Смежные вопросы