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.

Reestructura el dataframe utilizando el método melt de pandas para obtener dos columnas de valores.

Mis datos están en el siguiente formato:

x = pd.DataFrame([
    {'date': '2011-01-01', 'col1': '1', 'col2': '5', 'A_Q': '1', 'A_W': 'aa', 'B_Q': '2', 'B_W': 'zz'},
    {'date': '2011-01-02', 'col1': '1', 'col2': '9', 'A_Q': '-1', 'A_W': 'bb', 'B_Q': '3', 'B_W': 'rr'},
    {'date': '2011-01-03', 'col1': '3', 'col2': '3', 'A_Q': '0', 'A_W': 'cc', 'B_Q': '4', 'B_W': 'vv'},
    {'date': '2011-02-04', 'col1': '4', 'col2': '1', 'A_Q': '3', 'A_W': 'dd', 'B_Q': '5', 'B_W': 'gg'},
])
    date      col1 col2 A_Q A_W  B_Q B_W
0   2011-01-01  1    5   1   aa   2  zz
1   2011-01-02  1    9   -1  bb   3  rr
2   2011-01-03  3    3   0   cc   4  vv
3   2011-02-04  4    1   3   dd   5  gg

Me gustaría remodelar el dataframe utilizando la función melt u otras similares, con dos columnas de valores de salida. ¿Alguna idea de cómo hacer esto sin dividir la matriz de entrada?

   date        col1 col2 VAR Q   W
0   2011-01-01  1    5   A   1   aa
1   2011-01-01  1    5   B   2   zz
2   2011-01-02  1    9   A   -1  bb
3   2011-01-02  1    9   B   3   rr
4   2011-01-03  3    3   A   0   cc
5   2011-01-03  3    3   B   4   vv
6   2011-01-04  4    1   A   3   dd
7   2011-01-04  4    1   B   5   gg
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para dar forma al dataframe en el formato deseado con dos columnas de valores de salida, podemos usar la función melt de pandas.

    # Usando la función melt para dar forma al dataframe
    df = pd.melt(x, id_vars=['date', 'col1', 'col2'], var_name='VAR', value_name='Q_W')
    
    # Dividiendo la columna Q_W en las columnas Q y W
    df[['Q', 'W']] = df['Q_W'].str.split('_', expand=True)
    
    # Eliminando la columna Q_W
    df.drop('Q_W', axis=1, inplace=True)
    
    # Imprimiendo el resultado final
    print(df)
    

    Esto producirá el siguiente resultado:

             date  col1  col2 VAR  Q   W
    0  2011-01-01     1     5   A  1  aa
    1  2011-01-02     1     9   A -1  bb
    2  2011-01-03     3     3   A  0  cc
    3  2011-02-04     4     1   A  3  dd
    4  2011-01-01     1     5   B  2  zz
    5  2011-01-02     1     9   B  3  rr
    6  2011-01-03     3     3   B  4  vv
    7  2011-02-04     4     1   B  5  gg
    

    Aquí, primero usamos la función melt para convertir el dataframe en formato ancho a formato largo. Esta función toma el parámetro id_vars para especificar las columnas que deben permanecer sin cambios, y los parámetros var_name y value_name para especificar los nombres de las columnas para las variables y valores derretidos, respectivamente.

    Luego, dividimos la columna Q_W en dos columnas separadas Q y W usando la función split, y eliminamos la columna Q_W. Finalmente, imprimimos el dataframe de salida final.

Comments are closed.