如何构造隐含的概率。 Python中泊松分布的矩阵

时间:2019-03-05 15:28:23

标签: python pandas statistics poisson

我的数据框有两列,平均值为Team_A和Team_B在比赛中进球。对于每一行,我想创建一个3 x 3的矩阵,该矩阵使用泊松分布覆盖所有可能的得分线。 这是我数据的前几行,

d = {'Team_A':[2.0160, 1.3421, 2.4654, 3.0281], 'Team_B':[0.0653, 1.5641, 4.0241, 1.2375]}
df = pd.DataFrame(data=d)

因此,来自第一行的A组应该以{{1​​}}赢得比赛。假设分数是独立的,并且在一定间隔内发生,并使用泊松分布公式

score [2-0] (rounded to nearest integer)

P(k wins in interval) = ((lambda**k) * exp(-lambda))/factorial(k)

k = [0,1,2,3]

下表是通过上述概率的逐元素乘法构造的。

Team A scores 0, 1, 2 and 3 goals with prob. [0.1332, 0.2685, 0.2707, 0.1819] respectively. 
And, Team B scores 0, 1, 2 and 3 goals with [0.5205, 0.3399, 0.1110, 0.0242] probabilities.

问题

我不知道如何编写遍历每一行并创建3 x 3矩阵的python函数。

2 个答案:

答案 0 :(得分:1)

  

我不知道如何编写遍历每一行的python函数   并创建一个3 x 3矩阵。

我知道您已经处理了问题的统计部分(例如根据泊松分布计算概率),对吗?

如果是这样,则可以使用itertools product创建表。
假设prob_aprob_b是两个数组,分别包含团队A和团队B的概率。矩阵是通过以下方式构建的:

from itertools import product
import numpy as np

prod_table = np.array([(i*j) for i, j in product(prob_b, prob_a)])
prod_table.shape = (4, 4)

现在您有了一个4x4矩阵,其中包含您需要的所有值,您可以将其转换回熊猫数据框。
在此表中,团队A概率是列索引,团队B概率是行索引(应与您的示例匹配)。因此,要获得熊猫数据框,您可以执行以下操作:

prob_df = pd.DataFrame(prod_table, index=prob_b, columns=prob_a)

这是您要查找的表。

答案 1 :(得分:0)

我将使用numpy进行简单的线性代数运算(例如,将小矩阵相乘)。

如果您已经有想要的形状的数据框,则可以轻松地将其转换为numpy.ndarray。

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_numpy.html#pandas.DataFrame.to_numpy

否则,您将要创建一个零的ndarray,然后在正确的位置插入正确的元素。