2017-03-14 6 views
2

Ich habe meine Daten in einem Pandas DatenrahmenPython Gruppierung Transponieren

out[1]: 
    NAME  STORE  AMOUNT 
0 GARY  GAP   20 
1 GARY  GAP   10 
2 GARY  KROGER  15 
3 ASHLEY FOREVER21 30 
4 ASHLEY KROGER  10 
5 MARK  GAP   10 
6 ROGER KROGER  30 

Ich versuche, nach dem Namen zu bekommen Gruppierung, dessen Gesamtbetrages ausgegebene Summe, während auch Spalten für jeden einzelnen Speicher in dem Datenrahmen zu erzeugen. Wunsch :

out[1]: 
    NAME  GAP  KROGER  FOREVER21 
0 GARY  30  15   0 
1 ASHLEY 0   10   30 
2 MARK  10  0    0 
3 ROGER  0   30   0 

Vielen Dank für Ihre Hilfe!

Antwort

3

Sie benötigen pivot_table:

df1 = df.pivot_table(index='NAME', 
        columns='STORE', 
        values='AMOUNT', 
        aggfunc='sum', 
        fill_value=0) 
print (df1) 
STORE FOREVER21 GAP KROGER 
NAME       
ASHLEY   30 0  10 
GARY   0 30  15 
MARK   0 10  0 
ROGER   0 0  30 

Alternative Lösung mit Aggregation von groupby und sum:

df1 = df.groupby(['NAME','STORE'])['AMOUNT'].sum().unstack(fill_value=0) 
print (df1) 
STORE FOREVER21 GAP KROGER 
NAME       
ASHLEY   30 0  10 
GARY   0 30  15 
MARK   0 10  0 
ROGER   0 0  30 

Last bei Bedarf Spalte von Indexwerten und entfernen Sie Spalten- und Indexnamen:

print (df1.reset_index().rename_axis(None, axis=1).rename_axis(None)) 
    NAME FOREVER21 GAP KROGER 
0 ASHLEY   30 0  10 
1 GARY   0 30  15 
2 MARK   0 10  0 
3 ROGER   0 0  30 
+0

Danke für die schnelle und hilfreiche Antwort! – nonegiven72