2016-05-31 16 views
0

Ich hoffe, dass Betreffzeile Sinn macht. Ich habe den folgenden Code, um mir die ‚Task-Minutes‘ Summen und erstellen Sie eine neue df verwendet, die ganz gut funktioniert:Wie erhalte ich Zwischensummen, nachdem groupby(). Sum() summiert wurde?

>> df1 = df.groupby(['USER','Task'])['Task Minutes'].sum().reset_index(name='Total Task Min') 
>> df1 

    USER Task Total Task Min 
0 USER1 TASK1 48.00 
1 USER1 TASK2 139.00 
2 USER1 TASK3 86.00 

Was ich versuche jetzt zu tun, ist Gruppe DF1 von ‚USER‘ und ‚Aufgabe‘ und fassen die Minuten, so sieht es aus wie diese oder etwas ähnliches, um die Teilergebnisse der einzelnen Benutzer zu erhalten:

USER Task Total Task Min 
USER1 TASK1 48.00 
     TASK2 139.00 
     TASK3 86.00 
Total   273.00 

ich kann nicht ganz dorthin gelangen. Ich denke logisch wäre es so etwas wie:

df2 = df1.groupby(['USER'])['Total Task Min'].sum() 

... aber dies führt zu einem Fehler:

TypeError: unsupported operand type(s) for +: 'Decimal' and 'float' 
+0

Was die Ausgabe von 'ist df1.groupby (['USER']) ['Total Task Min']. sum() 'sieht aus? – ASGM

+0

Gleicher Fehler: TypeError: nicht unterstützte Operandentyp (en) für +: 'Dezimal' und 'float' – Mike

+0

Sie sind jedoch auf etwas. Ich denke, es hat mit einer vorherigen Summe() von Daten zu tun. Muss ich den Typ identifizieren, wenn ich eine vorsedierte Dataframe-Spalte verwende? – Mike

Antwort

0

Was dazu:

pd.pivot_table(df1, values=['Total Task Min'], index=['USER'], 
       columns=['Task'], aggfunc=np.sum, margins=True).stack('Task') 
Out[75]: 
       Total Task Min 
USER Task     
USER1 All    273 
     TASK1    48 
     TASK2    139 
     TASK3    86 
All All    273 
     TASK1    48 
     TASK2    139 
     TASK3    86 
Verwandte Themen