在python中计算频率的最简洁方法是什么?

Moh*_*hit 2 python counting

我有以下[0.1,0.2,1,5,100]等数据......我想要做的是计算之间的项目数

1-10
11-20
21-30
... and so on...
Run Code Online (Sandbox Code Playgroud)

现在,我有一个非常凌乱的代码..

我所做的就是映射

1-10 :=> 0
11-20:=> 1
..and on..
Run Code Online (Sandbox Code Playgroud)

所以我定义了桶0,其中桶0的范围是1-10,桶1的范围是11-20,依此类推.

代码是:

for ele in data:
    bucket_id = get_bucket_id(ele)
    freq_dict[bucket_id] +=1
Run Code Online (Sandbox Code Playgroud)

get_bucket_id是一个很大的if else代码..

有一个更好的方法吗?

Fre*_*Foo 7

使用a Counter并使用整数除法计算存储桶.

from collections import Counter

freq = Counter()
for x in data:
    freq[(x - 1) // 10] += 1
Run Code Online (Sandbox Code Playgroud)

请注意,这会将小于1的值映射到-1.在处理非严格正数据时,您实际上想要使用范围1-9,10-19等.

  • 略短(和恕我直言)更多可读:`freq =计数器((x-1)// 10为数据中的x)`. (2认同)

mdm*_*dml 5

您可以使用numpy.histogram,它将数据中的元素出现在一组间隔(箱)中的频率制成表格。它返回每个 bin 和每个 bin 最右边的计数:

>>> import numpy as np
>>> data = [0.1,0.2,1,5,100]
>>> hist, bin_edges = np.histogram( data )
>>> hist
array([4, 0, 0, 0, 0, 0, 0, 0, 0, 1])
>>> bin_edges
array([   0.1 ,   10.09,   20.08,   30.07,   40.06,   50.05,   60.04,
         70.03,   80.02,   90.01,  100.  ])
Run Code Online (Sandbox Code Playgroud)