如何构造隐含prob。python中泊松分布的矩阵
我的数据框有两列,分别是A队和B队在比赛中得分的平均值。对于每一行,我想创建一个3乘3的矩阵,使用泊松分布覆盖所有可能的分数线。 这是我的前几行数据如何构造隐含prob。python中泊松分布的矩阵,python,pandas,statistics,poisson,Python,Pandas,Statistics,Poisson,我的数据框有两列,分别是A队和B队在比赛中得分的平均值。对于每一行,我想创建一个3乘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队应该以得分[2-0](四舍五入到最接近的整数)赢得比赛。假设分数是独立的,且出现在一个区间
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队应该以得分[2-0](四舍五入到最接近的整数)
赢得比赛。假设分数是独立的,且出现在一个区间内,并使用泊松分布公式
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.
下表由上述概率的元素相乘构成
For example the implied prob. of a 2-0 Team A win = 0.2707 * 0.5205 = 0.140899
Team_A Goals 0 1 2 3
Team_B Goals Poisson for no.of_goal/Team 0.1332 0.2685 0.2707 0.1819
0 0.5205 0.0693 0.1398 0.1409 0.0947
1 0.3399 0.0453 0.0913 0.0920 0.0618
2 0.1110 0.0148 0.0298 0.0030 0.0202
3 0.0242 0.0032 0.0065 0.0065 0.0044
问题
我不知道如何编写一个python函数来循环每一行并创建一个3×3矩阵。我将使用numpy进行简单的线性代数运算(例如,乘以小矩阵) 如果已经有了所需形状的数据帧,则可以随时将其转换为numpy.ndarray 如果不是,您将要创建一个零数组,然后在正确的位置插入正确的元素 我不知道如何编写循环遍历每一行的python函数 并创建一个3乘3的矩阵 我知道你已经处理了问题的统计部分(比如根据泊松分布计算概率),对吗 如果是这样,您可以使用创建表。
假设
prob_a
和prob_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)
这就是你要找的桌子