2016-07-22 19 views
0

Ich benutze Python, Pandas, numpy.Gruppierte Daten in Python mit Pandas und

df = pd.read_csv('data.csv') 
print df.head(7) 

Ich habe Datenrahmen:

name day sum 
A  D1 6 
B  D1 7 
B  D3 8 
A  D10 3 
A  D2 4 
C  D2 6 
A  D1 9 

ich brauche:

name D1 D2  D3  ... D10 
A  =6+9 =6+9+4 =6+9+4 =6+9+4+...+3 
B  =7 =7  =7+8  =7+8+...+ 
C  =0 =0+6 =0+6  =6+... 

Ich brauche die folgende Tabelle mit einem kumulierten Gesamt zu erhalten:

name D1 D2  D3 ... D10 
A  15 19  19  .... 
B  7  7  15  
C  0  6  6   

Bitte sagen Sie mir, wie kann ich es tun? Vielen Dank!

p.s. Ich benutze Funktion pivot_table, (aber das Ergebnis ist nicht kumulativ insgesamt):

import pandas as pd 
import numpy as np 
pd.pivot_table(df, values='sum', index=['name'], columns=['day'], aggfunc=np.sum) 

Antwort

1

Verwendung df.cumsum (Achse = 1)

pivotedDf = pd.pivot_table(df, values='sum', index=['name'], columns=['day'], aggfunc=np.sum) 
pivotedDf = pivotedDf[['D1', 'D2', 'D3', 'D10']] # manually sort columns 
pivotedDf.cumsum(axis=1) 
1

pivot ing mit sum, gefolgt von fillna, tatsächlich tut genau das, was Sie in der Frage angegeben:

In [18]: df 
Out[18]: 
    name day sum 
0 A D1 6 
1 B D1 7 
2 B D3 8 
3 A D10 3 
4 A D2 4 
5 C D2 6 
6 A D1 9 

In [19]: pd.pivot_table(df, values='sum', index=['name'], columns= ['day'], aggfunc=sum).fillna(0) 
Out[19]: 
day  D1 D10 D2 D3 
name      
A  15.0 3.0 4.0 0.0 
B  7.0 0.0 0.0 8.0 
C  0.0 0.0 6.0 0.0 

Zum Beispiel 15.0 = 6 + 9, genau wie Sie es spezifiziert haben sollten.