2016-04-20 5 views
0

Ich möchte diese Pivot-Tabelle glätten, aber ich bin nicht in der Lage, eine Möglichkeit zu finden, die multi-indizierte Reihe von "ID" zu entfernen/zu verbergen/zu löschen.Wie flachte ich eine Python/Pandas Pivot-Tabelle ab und manipuliere die Spaltennamen?

Relevant Code:

df = df [['B1','B2','B3','B4']] 
df = pd.pivot_table(df,values=['BUCKET'],index=['ID'],columns=['TYPE'],aggfunc=len,fill_value='',margins=True) 

Was ergibt:

 BUCKET 
TYPE B1  B2  B3  B4 
ID 
1  236 data1 data2 data3 
2  323 data4 data5 data3 
3  442 data6 data2 data4 
4  543 data8 data2 data3 
5  676 data1 data8 data4 

Die folgende Zeile mich näher ein Schritt wird durch die erste Reihe dropping

df.columns = df.columns.droplevel(0) 

Was ergibt:

TYPE B1  B2  B3  B4 
ID 
1  236 data1 data2 data3 
2  323 data4 data5 data3 
3  442 data6 data2 data4 
4  543 data8 data2 data3 
5  676 data1 data8 data4 

ich brauche, um die Pivot-Tabelle abzuflachen und die „TYPE“ Zeilenkopf entfernen, ersetzen Sie es mit „ID“ und verstecken/Drop die vorherigen „ID“ Zeile, so dass es säubert aussehen und ordentlich wie das ist:

ID B1  B2  B3  B4 
1  236 data1 data2 data3 
2  323 data4 data5 data3 
3  442 data6 data2 data4 
4  543 data8 data2 data3 
5  676 data1 data8 data4 

Ich habe versucht, die Spalten/Zeilen mit diesen manipulieren, aber ohne Erfolg ... Vorschläge? Vielen Dank!

pd.melt(df,id_vars=['ID']) 
results.columns = results.columns.get_level_values(1) 
pivot_table.values.reset_index().values.tolist() 
+0

'df = df.drop ('spaltenname', 1)'? – eikooc

Antwort

0

, die den Namen des Index für Spalten ist, können Sie None zuweisen nur:

df.columns.name = None 

0

arbeiten sollten Sie neue Funktion in Pandas 0.18.0 verwenden können - rename_axis zum Entfernen Spaltenname und dann vielleicht reset_index:

print df 
TYPE B1  B2  B3  B4 
ID        
1  236 data1 data2 data3 
2  323 data4 data5 data3 
3  442 data6 data2 data4 
4  543 data8 data2 data3 
5  676 data1 data8 data4 

print df.rename_axis(None, axis=1) 
    B1  B2  B3  B4 
ID       
1 236 data1 data2 data3 
2 323 data4 data5 data3 
3 442 data6 data2 data4 
4 543 data8 data2 data3 
5 676 data1 data8 data4 

print df.rename_axis(None, axis=1).reset_index() 
    ID B1  B2  B3  B4 
0 1 236 data1 data2 data3 
1 2 323 data4 data5 data3 
2 3 442 data6 data2 data4 
3 4 543 data8 data2 data3 
4 5 676 data1 data8 data4