2016-11-18 3 views
2

Ich möchte das Ergebnis einer einzelnen Wert Aggregation mit 2 Gruppen von in einer Tabelle anzeigen.Drucken einer doppelten Gruppe mit Pandas-Datenrahmen als 2D-Array

Derart, dass

df.groupby(['colA', 'colB']).size 

ergeben würde:

B1 B2 B3 B4 
A1 s11 s12 s13 .. 
A2 s21 s22 s23 .. 
A3 s31 s32 s33 .. 
A4 .. .. .. s44 

Was ist eine schnelle und einfache Möglichkeit, dies zu tun?

EDIT: Hier ist ein Beispiel. Ich habe die Anmeldungen aller Benutzer, und ich möchte für jeden Benutzer und Tag

Day,User 
1,John 
1,John 
1,Ben 
1,Sarah 
2,Ben 
2,Sarah 
2,Sarah 

Sollte ergeben die Anzahl der Anmeldungen (= Zeilen) angezeigt werden:

D\U John Ben Sarah 
1 2  1 1 
2 0  1 2 

Antwort

3

Verwendung:

df.groupby(['colA', 'colB']).size().unstack() 

Beispiel:

df = pd.DataFrame(np.transpose([np.random.choice(['B1','B2','B3'], size=10), 
          np.random.choice(['A1','A2','A3'], size=10)]), 
      columns=['A','B']) 

df 

    A B 
0 B3 A1 
1 B1 A2 
2 B3 A3 
3 B1 A3 
4 B2 A2 
5 B3 A3 
6 B3 A1 
7 B2 A1 
8 B1 A3 
9 B3 A3 

Jetzt:

df.groupby(['A','B']).size().unstack() 

B A1 A2 A3 
A   
B1 NaN  1.0  2.0 
B2 1.0  1.0  NaN 
B3 2.0  NaN  3.0 

Aktualisieren, dass Ihre Post-Daten hat:

df.groupby(['Day','User']).size().unstack().fillna(0) 

User Ben John Sarah 
Day     
1  1.0 2.0 1.0 
2  1.0 0.0 2.0 
+1

so einfach. Liebe es. Vielen Dank – bsuire

Verwandte Themen