Entonces, mi conjunto de datos tiene información por ubicación para n fechas. El problema es que cada fecha es en realidad un encabezado de columna diferente. Por ejemplo, el CSV se parece a
location name Jan-2010 Feb-2010 March-2010
A "test" 12 20 30
B "foo" 18 20 25
Lo que me gustaría es que se vea así
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
el problema es que no sé cuántas fechas hay en la columna (aunque sé que siempre comenzarán después del nombre)
Respuestas:
ACTUALIZACIÓN
Desde v0.20,
melt
es una función de primer orden, ahora puede usarVERSIONES ANTIGUAS (ER): <0,20
Puede usar
pd.melt
para recorrer la mayor parte del camino y luego ordenar:(Es posible que desee lanzar un
.reset_index(drop=True)
, solo para mantener limpia la salida).Nota :
pd.DataFrame.sort
ha quedado obsoleto a favor depd.DataFrame.sort_values
.fuente
df2
[de nuevo] adf
pandas.pivot_table(df2,values='Value',index=['location','name'],columns='Date').reset_index()
.Use
set_index
constack
paraMultiIndex Series
, luegoDataFrame
agreguereset_index
conrename
:fuente
Supongo que encontré una solución más simple
Concat todo
temp1
contemp2
la columna dename
Ahora tienes lo que pediste.
fuente
pd.wide_to_long
Puede agregar un prefijo a las columnas de su año y luego ingresar directamente a
pd.wide_to_long
. No pretendo que esto sea eficiente , pero en ciertas situaciones puede ser más conveniente quepd.melt
, por ejemplo, cuando sus columnas ya tienen un prefijo apropiado.fuente