Mein Datensatz enthält also 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 so aus
location name Jan-2010 Feb-2010 March-2010
A "test" 12 20 30
B "foo" 18 20 25
Ich möchte, dass es so aussieht
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 ist, ich weiß nicht, wie viele Daten in der Spalte sind (obwohl ich weiß, dass sie immer nach dem Namen beginnen)
Antworten:
UPDATE
Ab Version 0.20
melt
ist eine Funktion erster Ordnung, die Sie jetzt verwenden könnenALTE (ER) VERSIONEN: <0,20
Sie können verwenden
pd.melt
, um den größten Teil des Weges dorthin zu gelangen, und dann sortieren:(Vielleicht möchten Sie ein werfen
.reset_index(drop=True)
, nur um die Ausgabe sauber zu halten.)Hinweis :
pd.DataFrame.sort
wurde zugunsten von abgelehntpd.DataFrame.sort_values
.quelle
df2
[zurück] zudf
pandas.pivot_table(df2,values='Value',index=['location','name'],columns='Date').reset_index()
.Verwenden Sie
set_index
mitstack
fürMultiIndex Series
, dann zumDataFrame
Hinzufügenreset_index
mitrename
:quelle
Ich denke, ich habe eine einfachere Lösung gefunden
Concat ganz
temp1
mittemp2
's Spaltename
Sie haben jetzt das, wonach Sie gefragt haben.
quelle
pd.wide_to_long
Sie können Ihren Jahresspalten ein Präfix hinzufügen und dann direkt an füttern
pd.wide_to_long
. Ich werde nicht so tun, als wäre dies effizient , aber es kann in bestimmten Situationen bequemer sein, alspd.melt
wenn Ihre Spalten bereits ein geeignetes Präfix haben.quelle