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,
meltes una función de primer orden, ahora puede usarVERSIONES ANTIGUAS (ER): <0,20
Puede usar
pd.meltpara 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.sortha quedado obsoleto a favor depd.DataFrame.sort_values.fuente
df2[de nuevo] adfpandas.pivot_table(df2,values='Value',index=['location','name'],columns='Date').reset_index().Use
set_indexconstackparaMultiIndex Series, luegoDataFrameagreguereset_indexconrename:fuente
Supongo que encontré una solución más simple
Concat todo
temp1contemp2la columna denameAhora tienes lo que pediste.
fuente
pd.wide_to_longPuede 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