返回

python-接收可变长度参数的条件概率函数

发布时间:2022-04-01 18:30:08 184
# 数据

我有一个数据帧df:

    A  B  C
0   0  1  0
1   0  1  1
2   0  1  1
3   1  0  1
4   0  0  0
5   1  0  0
6   0  0  0
7   0  0  1
8   1  0  0
9   0  0  0
10  1  0  1
11  1  0  1
12  0  1  1
13  1  0  0
14  1  0  0
15  0  1  0
16  1  1  0
17  0  0  1
18  1  0  1
19  1  0  0
20  1  0  1
21  1  1  0
22  1  1  1
23  1  1  1
24  1  0  0
25  1  1  0
26  0  0  1
27  0  1  1
28  0  1  0
29  1  1  0
30  1  0  1
31  0  1  0
32  0  0  1
33  1  1  1
34  0  1  0
35  1  1  0
36  0  1  0
37  0  0  1
38  0  1  1
39  0  1  1

我得到了联合概率P(A,B,C):

grp = df.apply(tuple, axis=1)
PrD=pd.concat([df.groupby(grp).first(),
           grp.groupby(grp).count().div(len(df)).rename("Probs")],
          axis=1).reset_index(drop=True)
print (PrD)

输出联合概率P(A,B,C)

   A  B  C  Probs
0  0  0  0  0.075
1  0  0  1  0.125
2  0  1  0  0.150
3  0  1  1  0.150
4  1  0  0  0.150
5  1  0  1  0.150
6  1  1  0  0.125
7  1  1  1  0.075

我试图编写一个函数,它接收PrD的一部分列名,并根据规则P(a | B)=P(a,B)/P(B)计算条件概率,如果它接收到3个变量:P(a | B,C)=P(a,B,C)/P(B,C),如果它接收到4个变量:P(a | B,C,D)=P(a,B,C,D),等等。例如,如果函数接收到P(A=0 | B=0),则输出应通过以下公式计算:(0.075+0.125)/(0.075+0.125+0.150+0.150) = 0.2其中,分子为A和B均为0时,分母为B=0时,如果它接收到一个变量A=0,则返回(0.075+0.125+0.150+0.150),仅返回A=0的行loc and query但它们只接收一个变量,而不是多个变量。我想要一个函数,根据它接收的变量的数量进行计算。

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(1)
按点赞数排序
用户头像