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
但它们只接收一个变量,而不是多个变量。我想要一个函数,根据它接收的变量的数量进行计算。
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报