Digamos que tengo cualquier lista anidada, por ejemplo

A = [[120, 'Date1', 1.03], [120, 'Date2', 1.04], [120, 'Date3', 1.02], [240, 'Date1', 1.06], [240,'Date2', 0.98],
     [240, 'Date3', 1.04], [381, 'Date2', 1.03], [381, 'Date3', 0.85]]

El primer elemento de cada sublista es el número de inventario, el segundo la fecha y el tercero un valor correspondiente. Quiero crear un marco de datos donde los encabezados de columna sean el número de stock, los encabezados de fila sean la fecha y los elementos sean los valores correspondientes (tercer elemento). No estoy directamente seguro de cómo haría esto. Quiero formar algo como esto:

      120     240    381
Date1 1.03    1.06   NaN
Date2 1.04    0.98   1.03
Date3 1.02    1.04   0.85

Pero quiero formar esto para la lista anidada de tamaño any , por lo que no puedo escribir cada variable para el marco de datos. Cualquier ayuda sería muy apreciada.

Gracias.

2
Hertzeh 28 feb. 2020 a las 14:50

2 respuestas

La mejor respuesta

Cree DataFrame por constructor y luego DataFrame.pivot con DataFrame.rename_axis:

df = pd.DataFrame(A).pivot(1,0,2).rename_axis(index=None, columns=None)
print (df)
        120   240   381
Date1  1.03  1.06   NaN
Date2  1.04  0.98  1.03
Date3  1.02  1.04  0.85
4
jezrael 28 feb. 2020 a las 11:51

Primero puede convertir su lista a un dict y luego construir un DataFrame directamente.

d = {}
[d.setdefault(e[0],{}).update({e[1]:e[2]}) for e in A]
df = pd.DataFrame(d)

        120     240     381
Date1   1.03    1.06    NaN
Date2   1.04    0.98    1.03
Date3   1.02    1.04    0.85
1
Allen 28 feb. 2020 a las 12:05