Python如何按频率检查数字的组合

2024-06-26 18:03:08 发布

您现在位置:Python中文网/ 问答频道 /正文

让我们以以下数据为例

 h: [Num1, Num2, Num3, Num4, Num5, Num6]
 a: [1,       2,    3,    4,    5,    6]
 b: [1,       2,    7,    8,    9,   10]
 c: [1,       2,    3,    6,    8,   10]

现在,假设我想看到2+的组合按频率排序

让我们以数字1为例,它出现在所有三行a、b、c中

当1被“使用”时,它通常与2(3/3)配对,然后是3、6、8、10(2/3)。 换句话说,当1被“使用”时,它有可能看起来像这样:

 [1, 2, x, y, z, t]
 [1, 2, 3, x, y, z]
 [1, 2, 6, x, y, z]
 .
 .
 .
 [1, 8, x, y, z, t]
 [1, 10, x, y, z, t]
 [1, 2, 3, 6, 8, 10]

秩序并不重要。x、 y,z,t可以是任意给定的数字。不存在/不允许重复项

我有一个这种格式的数据帧,我想看看还有什么其他整数与44相结合

例如:

 44 was paired with 11, 350 times out of 2000
 44 was paired with 27, 290 times out of 2000
 44 was paired with 35, 180 times out of 2000
 .
 .
 .
 44 was paired with 2, 5 times out of 2000

我知道每一个数字出现在每一列的频率,我只是不知道如何继续下去

期待您的想法和问题。 谢谢大家!


Tags: of数据with数字out频率timeswas
1条回答
网友
1楼 · 发布于 2024-06-26 18:03:08

您可以使用itertools模块中的Counter

from itertools import combinations
from collections import Counter
data = [[1, 2, 3],[1, 2, 5],[1, 3, 8],[2, 5, 8]]
pairings = Counter(
    pair for row in data 
    for pair in combinations(sorted(row), 2)
)

计数器对象类似于字典

Counter({
    (1, 2): 2, 
    (1, 3): 2, 
    (2, 5): 2, 
    (2, 3): 1, 
    (1, 5): 1, 
    (1, 8): 1, 
    (3, 8): 1, 
    (2, 8): 1, 
    (5, 8): 1
})

您可以获得特定对的计数,如下所示:

>>> pairings[1,2] 
2

相关问题 更多 >