2016-11-02 6 views
2

ich mit dem Datenrahmen unten beginnen, wobei jede Zeile ist ein neuer Versuch:Berechnete Spalte hinzufügen in DF und Plot 2 Linien

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 

Ich möchte das bedeuten Erfolg Wert und Gruppe von Test-Gruppe berechnen und Angebot.

so zu tun, würde ich den folgenden Code schreiben:

df = df.groupby('test_group','range').success.mean() 

sieht Ihr Ergebnis wie folgt aus

test_group range 
test   1-5 0.66 
       6-10 0.33 
control  1-5 0.33 
       6-10 1.00 

Idealer so, ich meine letzte Ausgabe wie folgt aussehen wollen, dass Ich kann beide Testgruppen auf dem gleichen Diagramm darstellen, wobei die x-Achse jeder Bereich ist und die y-Achse die Erfolgsrate ist:

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 

Antwort

2

Sie transform() Methode verwenden:

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() Methode gilt eine Aggregatfunktion auf alle ursprünglichen Reihen

+0

Danke, @MaxU! Das ist, was ich gesucht habe. Kannst du etwas erklären, was unter der Haube passiert? – Levine