2017-04-03 2 views
2

der Datenrahmen Gegeben:Konvertieren eine indizierte pandas Matrix in einer flachen Datenrahmen

df = pd.DataFrame([['foo', 123, 4, 5, 0, 1], ['foo', 123, 4, 0, 9, 1], ['bar', 33, 0, 0, 3, 5]], columns=list('ABCDEF')) 

[out]:

A B C D E F 
0 foo 123 4 5 0 1 
1 foo 123 4 0 9 1 
2 bar 33 0 0 3 5 

Das Ziel ist, bestimmte Spalten ('C', 'D' zu summieren, 'E', F ') unter Verwendung von anderen Spalten (' A‘und 'B') als Schlüssel zu erreichen:

A B C D E F 
0 foo 123 8 5 9 2 
2 bar 33 0 0 3 5 

ich habe versucht:

df.groupby(['A', 'B']).sum() 

[out]:

 C D E F 
A B    
bar 33 0 0 3 5 
foo 123 8 5 9 2 

Wie ändere ich es zurück in die nicht-indizierten Matrix? das heißt

A B C D E F 
0 foo 123 8 5 9 2 
2 bar 33 0 0 3 5 

Antwort

2

Sie müssen .reset_index() hinzuzufügen.

df.groupby(['A','B']).sum().reset_index() 

    A B C D E F 
0 bar 33 0 0 3 5 
1 foo 123 8 5 9 2 

oder

df.set_index(['A','B']).sum(level=[0,1]).reset_index() 

    A B C D E F 
0 bar 33 0 0 3 5 
1 foo 123 8 5 9 2 
2

Sie Parameter as_index=False für die Rückkehr können df:

df1 = df.groupby(['A', 'B'], as_index=False).sum() 
print (df1) 
    A B C D E F 
0 bar 33 0 0 3 5 
1 foo 123 8 5 9 2 
Verwandte Themen