在我的数据集中,有 N
个人,每个人被分成 3 组 (groups = {A, B, C})
。我想找出两个随机人 n_1
和 n_2
属于同一组的概率。
我有关于每个组的数据以及有多少人属于这些组。重要的是,每个组的大小都不同。
import pandas as pd
import numpy as np
import math
data = {
"Group": ['A', 'B', 'C'],
"Count": [20, 10, 5],
}
df = pd.DataFrame(data)
Group Count
0 A 20
1 B 10
2 C 5
我想我知道如何获取样本空间 S
但我不确定如何获取分子。
def nCk(n,k):
f = math.factorial
return f(n) / f(k) / f(n-k)
n = sum(df['Count'])
k = 2
s = nCk(n, k)
最佳答案
我的离散数学技能有点生疏,请随时纠正我。您将 N
人分成大小为 s_1, ..., s_n
的组,这样 N = s_1 + ... + s_n
。
- 一个随机的人属于组
i
的机会是s_i/N
- 第二个人在组
i
中的机会是(s_i - 1)/(N - 1)
- 两人都在
i
组的机会是s_i/N * (s_i - 1)/(N - 1)
- 他们在任何组中在一起的概率是#3 中所有组中概率的总和。
代码:
import numpy as np
s = df['Count'].values
n = s.sum()
prob = np.sum(s/n * (s-1)/(n-1)) # 0.4117647058823529
我们可以将此解决方案概括为“k
人都在同一组中的概率”:
k = 2
i = np.arange(k)[:, None]
tmp = (s-i) / (n-i)
prob = np.prod(tmp, axis=0).sum()
当 k > s.max()
(在本例中为 20)时,答案为 0,因为您无法将它们全部放入一个组中。当 k > s.sum()
(本例中为 35)时,结果为 nan
。
关于python - 计算随机2个人在同一组的概率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58069265/