¿Cómo revertir una tabla bidimensional (DataFrame) en una lista tridimensional utilizando Pandas?

Estoy buscando en Python / Pandas una sugerencia que invierta una tabla de 2 dimensiones en una lista dimensional.

Usualmente uso una función de Excel para hacerlo, pero creo que hay una forma inteligente de Python para hacerlo.

Paso

Más detalles de la forma de Excel: http://www.extendoffice.com/documents/excel/2461-excel-reverse-pivot-table.html

Esto debería funcionar:

 table = [ ["Lables", "A", "B", "C"], ["X", 1, 2, 3], ["Y", 4, 5, 6], ["Z", 7, 8, 9] ] new_table = [["Row", "Column", "Data"]] for line in table[1:]: for name, cell in zip(table[0], line)[1:]: new_line = [line[0], name, cell] new_table.append(new_line) 

La salida es:

 [ ['Row', 'Column', 'Data'], ['X', 'A', 1], ['X', 'B', 2], ['X', 'C', 3], ['Y', 'A', 4], ['Y', 'B', 5], ['Y', 'C', 6], ['Z', 'A', 7], ['Z', 'B', 8], ['Z', 'C', 9] ] 

Ejemplo tomado de http://pandas.pydata.org/pandas-docs/stable/reshaping.html

tl; dr, uso:

 from pandas import * df.stack() 

====================

Vamos a dar un ejemplo de cómo se puede hacer esto.

Genere los datos de muestra primero:

 from pandas import * import pandas.util.testing as tm; tm.N = 3 import numpy as np def unpivot(frame): N, K = frame.shape data = {'value' : frame.values.ravel('F'), 'variable' : np.asarray(frame.columns).repeat(N), 'date' : np.tile(np.asarray(frame.index), K)} return DataFrame(data, columns=['date', 'variable', 'value']) df = unpivot(tm.makeTimeDataFrame()) df2= df.pivot('date', 'variable') 

Vamos a anular esta tabla:

  value variable ABCD date 2000-01-03 -0.425081 0.163899 -0.216486 -0.266285 2000-01-04 0.078073 0.581277 0.103257 -0.338083 2000-01-05 0.721696 -1.311509 -0.379956 0.642527 

Correr:

 df2= df.pivot('date', 'variable') print df2 

Voila! Ahora conseguimos la mesa deseada.

  value date variable 2000-01-03 A -0.425081 B 0.163899 C -0.216486 D -0.266285 2000-01-04 A 0.078073 B 0.581277 C 0.103257 D -0.338083 2000-01-05 A 0.721696 B -1.311509 C -0.379956 D 0.642527