2015-02-22 28 views
15

So hat mein Dataset einige Informationen nach Standort für n Daten. Das Problem ist, dass jedes Datum tatsächlich eine andere Spaltenüberschrift ist. Zum Beispiel sieht die CSV wiePandas konvertieren einige Spalten in Zeilen

location name Jan-2010 Feb-2010 March-2010 
A   "test" 12   20   30 
B   "foo" 18   20   25 

Was Ich mag würde, ist für sie wie

location name Date  Value 
A   "test" Jan-2010 12  
A   "test" Feb-2010 20 
A   "test" March-2010 30 
B   "foo" Jan-2010 18  
B   "foo" Feb-2010 20 
B   "foo" March-2010 25 

Problem aussehen wird, weiß ich nicht, wie viele Daten in der Spalte sind (obwohl ich weiß, werden sie immer nach dem Namen beginnen)

+0

http://stackoverflow.com/questions/19842066/python-pandas-certain-columns-to-rows – pyCthon

Antwort

50

Sie pd.melt können die meisten der Weg dorthin zu gelangen, und dann sort:

>>> df 
    location name Jan-2010 Feb-2010 March-2010 
0  A test  12  20   30 
1  B foo  18  20   25 
>>> df2 = pd.melt(df, id_vars=["location", "name"], 
        var_name="Date", value_name="Value") 
>>> df2 
    location name  Date Value 
0  A test Jan-2010  12 
1  B foo Jan-2010  18 
2  A test Feb-2010  20 
3  B foo Feb-2010  20 
4  A test March-2010  30 
5  B foo March-2010  25 
>>> df2 = df2.sort(["location", "name"]) 
>>> df2 
    location name  Date Value 
0  A test Jan-2010  12 
2  A test Feb-2010  20 
4  A test March-2010  30 
1  B foo Jan-2010  18 
3  B foo Feb-2010  20 
5  B foo March-2010  25 

(vielleicht nur in einem .reset_index(drop=True), werfen wollen die Ausgabe sauber. Zu halten)

+3

Ein Jahr später, Dies ist immer noch die prägnanteste Antwort, die ich zu den Spalten zu Zeilen Frage gesehen habe. Vielen Dank! –

+0

@DSM was wäre die Umkehrung dieser Funktion. Wie würde man 'df2' [zurück] in' df' konvertieren? – 3kstc

+0

@ 3kstc Try [hier] (https://stackoverflow.com/q/28337117/2336725) oder [hier] (https://stackoverflow.com/ q/47152691/2336725). Sie wollen in Pivots schauen. Möglicherweise 'pandas.pivot_table (df2, values ​​= 'Wert', index = ['Ort', 'Name'], Spalten = 'Datum'). Reset_index()'. – Teepeemm

Verwandte Themen