es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Transformar valores en columnas y crear formato largo a ancho usando Pandas.

Tengo un conjunto de datos en el que deseo transformar los valores en columnas y crear un formato largo a ancho utilizando Pandas.

Datos

id tipo Q122 Q222 Q322
aa hi 4 6 7
aa hello 2 3 3
aa ok 6 8 9
aa bye 1 1 1

Deseado

id fecha tipo conteo

aa Q122 hi 4
aa Q122 hello 2
aa Q122 ok 6
aa Q122 bye 1
aa Q222 hi 6
aa Q222 hello 3
aa Q222 ok 8
aa Q222 bye 1
aa Q322 hi 7
aa Q322 hello 3
aa Q322 ok 9
aa Q322 bye 1

Realizando

a = df.set_index([‘id’, ‘fecha’]).rename_axis(columns=’tipo’).stack()

También estoy buscando incorporar los conteos en el resultado final, cualquier sugerencia es apreciada.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución

    Puede utilizar pandas.melt para transformar sus datos de formato ancho a largo.

    import pandas as pd
    
    <h1>Crear dataframe</h1>
    
    df = pd.DataFrame({'id': ['aa', 'aa', 'aa', 'aa'],
                       'type': ['hi', 'hello', 'ok', 'bye'],
                       'Q122': [4, 2, 6, 1],
                       'Q222': [6, 3, 8, 1],
                       'Q322': [7, 3, 9, 1]})
    
    <h1>Transformar el dataframe</h1>
    
    df<em>melt = pd.melt(df, id</em>vars=['id', 'type'], var<em>name='date', value</em>name='count')
    
    <h1>Imprimir el dataframe</h1>
    
    print(df_melt)
    

    Resultado

    id  type    date    count
    0   aa  hi  Q122    4
    1   aa  hello   Q122    2
    2   aa  ok  Q122    6
    3   aa  bye Q122    1
    4   aa  hi  Q222    6
    5   aa  hello   Q222    3
    6   aa  ok  Q222    8
    7   aa  bye Q222    1
    8   aa  hi  Q322    7
    9   aa  hello   Q322    3
    10  aa  ok  Q322    9
    11  aa  bye Q322    1
    

Comments are closed.