如何根据第二个连续列表获取列表中的数字频率

时间:2017-12-15 22:28:33

标签: python frequency

我是python的新手

我找到了关于计算列表中数字频率的主题。但是,在我的问题中,我希望得到与第二个连续列表相对应的频率,以便为缺失的元素分配零计数。 我的搜索列表:

Earthquake_Magnitude = [ 3.5  4.4  3.4  3.6  3.2  3.3  3.7  3.   3.1  4.3  3.9  3.2  3.1  3.2  3.6  3.1  4.   3.5  4.4  3.   3.   3.6  4.2  3.7  3.1  3.4  3.1  3.6  3.4  3.  4.1  3.4  4.2  3.4  3.9  3.   3.9  3.   3.   3.5  3.2  3.1]

我的第二个清单:

Magnitude_bins = [ 3.   3.1  3.2  3.3  3.4  3.5  3.6  3.7  3.8  3.9  4.   4.1  4.2  4.3  4.4]

3 个答案:

答案 0 :(得分:1)

让我们定义你的清单:

>>> Earthquake_Magnitude = [3.5, 4.4, 3.4, 3.6, 3.2, 3.3, 3.7, 3., 3.1, 4.3, 3.9, 3.2, 3.1, 3.2, 3.6, 3.1, 4., 3.5, 4.4, 3., 3., 3.6, 4.2, 3.7, 3.1, 3.4, 3.1, 3.6, 3.4, 3., 4.1, 3.4, 4.2, 3.4, 3.9, 3., 3.9, 3., 3., 3.5, 3.2, 3.1]
>>> Magnitude_bins = [3., 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4., 4.1, 4.2, 4.3, 4.4]

现在,让我们在Earthquake_Magnitude中计算一个条目,忽略Magnitude_bins以外的任何条目:

>>> from collections import Counter
>>> c = Counter(x for x in Earthquake_Magnitude if x in set(Magnitude_bins))
>>> c
Counter({3.0: 7, 3.1: 6, 3.4: 5, 3.2: 4, 3.6: 4, 3.9: 3, 3.5: 3, 4.4: 2, 4.2: 2, 3.7: 2, 3.3: 1, 4.1: 1, 4.3: 1, 4.0: 1})

您可以在3.0

中看到Earthquake_Magnitude发生了7次

答案 1 :(得分:1)

导入groupby并定义列表,并添加2.9作为0的证明,因为预定义的结果都在magnitude_bins中。

from itertools import groupby

# Predefined lists from the question with the addition of 2.9 for proof of 0
earthquake_magnitude = [3.5, 4.4, 3.4, 3.6, 3.2, 3.3, 3.7, 3.0, 3.1, 4.3, 3.9,
                        3.2, 3.1, 3.2, 3.6, 3.1, 4.0, 3.5, 4.4, 3.0, 3.0, 3.6,
                        4.2, 3.7, 3.1, 3.4, 3.1, 3.6, 3.4, 3.0, 4.1, 3.4, 4.2,
                        3.4, 3.9, 3.0, 3.9, 3.0, 3.0, 3.5, 3.2, 3.1, 2.9]
magnitude_bins = [3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 4.1,
                  4.2, 4.3, 4.4]

现在对列表进行排序,以便groupby可以做到这一点

earthquake_magnitude.sort()

现在我们创建一个"幅度的字符串列表:count"如果它在magnitude_bins中,否则使count = 0

output = [str(key) + ": " + str(len(list(group))) if key in magnitude_bins \
       else str(key) + ": " + str(0) \
       for key, group in groupby(earthquake_magnitude)]

显示输出

print(output)

答案 2 :(得分:0)

我认为你最好创建一个"字典",这是一个从Python中键到值的查找表。在这种情况下,您的"键" (你在字典中查询它的东西)将是地震的大小,以及"值" (在查询词典中出现的内容)将是这种程度的地震数量。

所以,你可以尝试:

from collections import defaultdict

freq = defaultdict(int)

for thisEvent in Earthquake_Magnitude:
    freq[thisEvent] += 1

for thisBin in Magnitude_bins:
    print(str(thisBin) + " has frequency " + str(freq[thisBin]))

在这种情况下,defaultdict是一个具有默认值的字典,以便使所有起始频率为0.