2016-07-21 17 views
4

Gibt es eine Entsprechung von pandas.DataFrame.reset_index, die auf den Spalten operiert und in der Lage ist, doppelte Spaltennamen zu behandeln?pandas DataFrame reset_index für Spalten?

Offensichtlich konnte ich einfach Spalten neue Werte zuweisen, was ich wissen möchte, wenn es eine Methode wie df.reset_index gibt, um das zu tun.

Probeneingangs

pd.DataFrame(np.random.rand(5, 3), columns = ['A', 'A', 'B']) 

    A A B 
0 0.5 0.3 0.9 
1 0.7 0.9 0.3 
2 0.9 0.4 0.8 
3 0.6 0.2 0.9 
4 0.7 0.4 0.6 

Erwarteter Ausgang

 0 1 2 
0 0.8 0.1 0.2 
1 0.4 0.2 0.4 
2 0.3 0.3 0.4 
3 0.4 0.1 0.8 
4 1.0 0.9 0.9 

wobei 0, 1, 2 nur die Standardmethode der Pandas ist Spalten zu nennen in keinen Namen versehen ist.

Die bestehenden Methoden wie df.rename oder df.reindex_axis funktionieren nicht, wenn ich doppelte Spaltennamen

Antwort

3

können Sie set_axis() Methode verwenden:

In [54]: df 
Out[54]: 
      A   A   B 
0 0.934900 0.817182 0.166270 
1 0.064543 0.139431 0.249576 
2 0.709349 0.731913 0.965048 
3 0.284955 0.479898 0.496652 
4 0.520749 0.464256 0.999993 

In [55]: df.set_axis(1, range(len(df.columns))) 

In [56]: df 
Out[56]: 
      0   1   2 
0 0.934900 0.817182 0.166270 
1 0.064543 0.139431 0.249576 
2 0.709349 0.731913 0.965048 
3 0.284955 0.479898 0.496652 
4 0.520749 0.464256 0.999993 
2

Verwenden range mit einer Länge von Spalten von shape:

df.columns = range(df.shape[1]) 
print (df) 
      0   1   2 
0 0.228080 0.884450 0.753401 
1 0.176790 0.741979 0.525305 
2 0.680255 0.730258 0.449681 
3 0.169420 0.660825 0.986554 
4 0.302204 0.040413 0.902899 

Eine andere Lösung mit Doppel Transponieren von T und reset_index mit Parameter drop=True:

df = df.T.reset_index(drop=True).T 
print (df) 
      0   1   2 
0 0.024846 0.688193 0.887926 
1 0.284681 0.895319 0.142876 
2 0.440834 0.299527 0.762815 
3 0.936967 0.928907 0.642960 
4 0.801077 0.085773 0.866651 
+0

Wie in der Frage geschrieben, ich will neue Werte Spalten zuweisen zu vermeiden. Insbesondere möchte ich diese Operation im Zusammenhang mit einem Wörterbuch Verständnis, wo ich den Datenrahmen durch Verketten von Zeitreihen erstellen und dann den Namen der Spalten ändern. – FLab

+0

Ok, dann zweite Lösung verwenden. Leider funktioniert 'reset_index' nicht mit Spalten, also muss doppelt transponiert werden. – jezrael

Verwandte Themen