2017-03-09 4 views
1

Hat jemand eine Idee, wie alle booleschen Werte (einschließlich der falschen) in Pivot-Tabelle zu zählen?Python zählen alle booleschen Werte in Pivot-Tabelle

passed_exam ist eine Spalte mit booleschen Werten.

Dieser Code führt die Aufgabe nur für wahre Werte, die groß ist:

table = pd.pivot_table(df,index=["student","semester"], values=["passed_exam"],aggfunc=np.sum) 

Aber ich möchte auch eine Spalte, die alle Boolesche Werte zählt.

Vielen Dank im Voraus!

+0

die Tabelle Negieren, das gleiche tun, die beiden Werte hinzufügen? – Mathias711

Antwort

2

Ich glaube, Sie brauchen groupby mit size, umformen zuletzt durch unstack:

df = pd.DataFrame({'student':['a'] * 4 + ['b'] * 6, 
        'semester':[1,1,2,2,1,1,2,2,2,2], 
        'passed_exam':[True, False] * 5}) 

print (df) 
    passed_exam semester student 
0  True   1  a 
1  False   1  a 
2  True   2  a 
3  False   2  a 
4  True   1  b 
5  False   1  b 
6  True   2  b 
7  False   2  b 
8  True   2  b 
9  False   2  b 

table = df.groupby(["student","semester","passed_exam"]) 
      .size() 
      .unstack(fill_value=0) 
      .rename_axis(None, axis=1) 
      .reset_index() 
print (table) 
    student semester False True 
0  a   1  1  1 
1  a   2  1  1 
2  b   1  1  1 
3  b   2  2  2 
+0

Vielen Dank! Ist es möglich, a und b nicht zu wiederholen? Ich meine eine in der ersten Reihe und dann in der zweiten Reihe leer? und immer einen Datenrahmen als Ergebnis erhalten – Sheron

+0

Sicher, können Sie neue Fragen mit Beispieldaten, gewünschte Ausgabe und was Sie versuchen? Vielen Dank. – jezrael

+0

Und verwenden Sie meine Probe, kein Problem, oder Sie können es ändern, wie Sie brauchen. Vielleicht helfen [wie man ein großartiges Pandas-Beispiel zur Verfügung stellt] (http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples). – jezrael