Convertir trama de datos de la lista de columnas a filas

Andrés Bustamante :

Tengo una trama de datos de este tipo pandas

col1  col2           col3
 1   [blue]         [in,out]
 2   [green, green] [in]
 3   [green]        [in]

y necesito convertirlo en una trama de datos que mantienen la primera columna y distribuir todos los demás valores de las columnas como filas:

col1 value
1    blue
1    in
1    out
2    green
2    green
2    in
3    green
3    in
Jezreel:

El uso DataFrame.stackde Series.explodelas listas de convertir, el último algunos datos de la limpieza con DataFrame.reset_index:

df1 = (df.set_index('col1')
         .stack()
         .explode()
         .reset_index(level=1, drop=True)
         .reset_index(name='value'))

Alternativa con DataFrame.melty DataFrame.explode:

df1 = (df.melt('col1')
         .explode('value')
         .sort_values('col1')[['col1','value']]
         .reset_index(drop=True)
)

print (df1)
   col1  value
0     1   blue
1     1     in
2     1    out
3     2  green
4     2  green
5     2     in
6     3  green
7     3     in

O solución lista por comprensión:

L = [(k, x) for k, v in df.set_index('col1').to_dict('index').items() 
            for k1, v1 in v.items() 
            for x in v1]

df1 = pd.DataFrame(L, columns=['col1','value'])
print (df1)
   col1  value
0     1   blue
1     1     in
2     1    out
3     2  green
4     2  green
5     2     in
6     3  green
7     3     in

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=285073&siteId=1
Recomendado
Clasificación