【发布时间】:2022-11-14 16:27:06
【问题描述】:
我试图在聚合我的数据集时计算条件响应概率。以以下玩具示例为例:
import pandas as pd
gender = [0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1]
is_family = [0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1]
treatment = [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]
response = [1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1]
num_rows = [10,10,5,20,0,5,10,30,20,30,10,5,60,10,10,20]
df = pd.DataFrame(data={'gender': gender, 'is_family': is_family, 'treatment': treatment, 'response': response, 'num_rows': num_rows})
gender is_family treatment response num_rows
0 0 0 0 1 10
1 0 0 1 0 10
2 0 0 0 0 5
3 0 0 1 1 20
4 0 1 0 1 0
5 0 1 1 0 5
6 0 1 0 0 10
7 0 1 1 1 30
8 1 0 0 1 20
9 1 0 1 0 30
10 1 0 0 0 10
11 1 0 1 1 5
12 1 1 0 1 60
13 1 1 1 0 10
14 1 1 0 0 10
15 1 1 1 1 20
当按gender、treatment 和response 进行分组和聚合时,我想(1)对每组的行数求和,(2)计算给定治疗的响应概率。结果应该是这样的
gender treatment response num_rows resp_prob
0 0 0 0 15 0.600000
1 0 0 1 10 0.400000
2 0 1 0 15 0.230769
3 0 1 1 50 0.769231
4 1 0 0 20 0.200000
5 1 0 1 80 0.800000
6 1 1 0 40 0.615385
7 1 1 1 25 0.384615
第一响应概率计算如下:15(响应=0,治疗=0)/25(治疗=0)=0.6。第三个响应概率计算如下:15 / 65 = 0.23。等等。
我可以总结每组的样本数量:
df.groupby(by=['gender', 'treatment', 'response'])['num_rows'].sum().reset_index()
但是概率呢?
有任何想法吗?
【问题讨论】: