python - 计算随机2个人在同一组的概率?

标签 python pandas numpy statistics probability

在我的数据集中,有 N 个人,每个人被分成 3 组 (groups = {A, B, C})。我想找出两个随机人 n_1n_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

  1. 一个随机的人属于组 i 的机会是 s_i/N
  2. 第二个人在组 i 中的机会是 (s_i - 1)/(N - 1)
  3. 两人都在 i 组的机会是 s_i/N * (s_i - 1)/(N - 1)
  4. 他们在任何组中在一起的概率是#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/

相关文章:

python - numpy 数组的固定大小子矩阵的索引

python - Numpy:如何向量化应用于数据集的函数的函数形式的参数

python - 使用来自另一个 Pandas 数据框的信息填充 Pandas 数据框

python - 根据字符串过滤 pandas 上的列

python - 变量不会在测试之间更新

python - 在python中动态创建文件

python - Pandas 使用地理距离中前一行的值

python - 将numpy数组转换为带分隔符的字符串并保存到txt文件

python - 如何在不重复导入顶级名称的情况下构造python包

python - 使用模式在 python 中版本字符串