2016-08-08 13 views
1

Ich habe ein Datenframe namens Pop, das wie folgt aussieht (Sorry, dies ist nicht sehr gut formatieren, aber es ist ein einzelner Index DataFrame (State ist die Index) mit Spalten für jedes Jahr habe ich nur eine kleine Auswahl der Daten gestellt.):Konvertieren Sie alle Spalten in einem Dataframe zu einem einzigen sekundären Index in einem MultiIndex Dataframe

  2007 2008 2009 
State        
Alabama 4637904 4677464 4708708 

gibt es eine Möglichkeit, dies zu einem Multiindex Datenrahmen zu leicht umwandeln, wo das Jahr ein Sekundärindex wird. Das einzige Element ist ein neues Feld 'Population', das die Daten aus dem ursprünglichen Datenrahmen übernimmt. Es würde sich ideal so etwas wie:

   Population 
State  Year 

Alabama 2007  4637904 

Alabama 2008  4677464 

Alabama 2009  4708708 

etc ...

Ich habe für eine Art von Code suchen, da dies wie etwas scheint, dass in Python behandelt werden könnten. Vielen Dank!

Antwort

1

können Sie melt verwenden, um Spalten in Zeilen zu konvertieren:

In [10]: df 
Out[10]: 
    state  2007  2008  2009 
0 Alabama 4637904 4677464 4708708 
1 Maine 1234567 1432765 1432567 
2 Florida 19432765 19123456 19765654 

In [13]: out = pd.melt(df, id_vars=['state'], var_name=['year'], value_name='population') 

In [14]: out 
Out[14]: 
    state year population 
0 Alabama 2007  4637904 
1 Maine 2007  1234567 
2 Florida 2007 19432765 
3 Alabama 2008  4677464 
4 Maine 2008  1432765 
5 Florida 2008 19123456 
6 Alabama 2009  4708708 
7 Maine 2009  1432567 
8 Florida 2009 19765654 

Und schließlich Einstellung des Index:

In [15]: out.set_index(['state', 'year']) 
Out[15]: 
       population 
state year    
Alabama 2007  4637904 
Maine 2007  1234567 
Florida 2007 19432765 
Alabama 2008  4677464 
Maine 2008  1432765 
Florida 2008 19123456 
Alabama 2009  4708708 
Maine 2009  1432567 
Florida 2009 19765654 

PS: Ich benutzte Zufallswerte für die Bevölkerung Staaten

Verwandte Themen