2016-11-02 44 views
2

我開始與下面的數據幀,其中每行是一個新的嘗試:添加計算列到DF和劇情2線

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 

回答

2

您可以使用transform()方法:

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()方法應用的聚合函數來所有原始行

+0

謝謝,@MaxU!這是我正在尋找的。你能解釋一下發生了什麼? – Levine