我从下面的dataframe开始,其中每一行都是一个新的尝试:
test_group range success
0 test 1-5 1
1 test 1-5 0
2 test 1-5 1
3 test 6-10 1
4 test 6-10 0
5 test 6-10 0
6 control 1-5 0
7 control 1-5 0
8 control 1-5 1
9 control 6-10 1
10 control 6-10 1
11 control 6-10 1
我想通过测试组和测试范围来计算平均成功值和分组。
为此,我编写了以下代码:
df = df.groupby('test_group','range').success.mean()
我的结果如下
test_group range
test 1-5 0.66
6-10 0.33
control 1-5 0.33
6-10 1.00
理想情况下,我希望我的最终输出如下所示,这样我就可以在相同的图表上绘制两个测试组,x轴是每个范围,y轴是成功率:
test_group range success-rate
0 test 1-5 0.66
1 test 1-5 0.66
2 test 1-5 0.66
3 test 6-10 0.33
4 test 6-10 0.33
5 test 6-10 0.33
6 control 1-5 0.33
7 control 1-5 0.33
8 control 1-5 0.33
9 control 6-10 1.00
10 control 6-10 1.00
11 control 6-10 1.00
发布于 2016-11-02 20:28:09
您可以使用变换()方法:
In [35]: df['success-rate'] = df.groupby(['test_group','range'])['success'].transform('mean')
In [36]: df
Out[36]:
test_group range success success-rate
0 test 1-5 1 0.666667
1 test 1-5 0 0.666667
2 test 1-5 1 0.666667
3 test 6-10 1 0.333333
4 test 6-10 0 0.333333
5 test 6-10 0 0.333333
6 control 1-5 0 0.333333
7 control 1-5 0 0.333333
8 control 1-5 1 0.333333
9 control 6-10 1 1.000000
10 control 6-10 1 1.000000
11 control 6-10 1 1.000000
Groupby.transform()
方法将聚合函数应用于所有原始行
https://stackoverflow.com/questions/40389121
复制相似问题