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.

Reformando el dataframe de pandas desde la tabulación de crosstabulación al formato largo.

Tengo un dataframe similar al siguiente:

d = {'Country': ['USA', 'France', 'Germany'], 'USA': [np.nan, 2, 5], 'France': [3, np.nan, 7], 'Germany': [3.5, 4, np.nan]}
df = pd.DataFrame(data=d)

    Country USA France  Germany
0   USA     NaN   3       3.5
1   France  2     NaN      4
2   Germany 5      7      NaN

Deseo remodelarlo al siguiente formato:

d = {'Country': ['USA', 'USA', 'France', 'France', 'Germany', 'Germany'], 'Country2': ['France', 'Germany', 'USA', 'Germany', 'USA', 'France'],
    'Value': [3, 3.5, 2, 4, 5, 7]}
df = pd.DataFrame(data=d)

Country     Country2    Value
0   USA     France      3.0
1   USA     Germany     3.5
2   France  USA         2.0
3   France  Germany     4.0
4   Germany USA         5.0
5   Germany France      7.0

¿Cómo puedo girar/moldear/pivotar el dataframe para lograr este resultado?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para remodelar el dataframe desde el formato original al formato deseado, podemos utilizar la función melt en pandas.

    Primero, debemos identificar las variables que queremos mantener fijas (es decir, Country) y las variables que queremos remodelar (es decir, USA, France y Germany). Utilizamos la función melt para convertir el formato horizontal en un formato vertical.

    Luego, renombramos las columnas para reflejar la nueva estructura del dataframe.

    Finalmente, utilizamos la función pivot para remodelar el dataframe desde formato largo a formato ancho.

    Aquí está el código para lograr esto:

    # Remodelar el dataframe
    melted_df = pd.melt(df, id_vars=['Country'], value_vars=['USA', 'France', 'Germany'], var_name='Country2', value_name='Value')
    
    # Remodelar el dataframe a formato ancho
    pivoted_df = melted_df.pivot(index='Country', columns='Country2', values='Value').reset_index().rename_axis(None, axis=1)
    
    # Renombrar las columnas
    pivoted_df.columns.name = None
    pivoted_df.columns = ['Country', 'Country2', 'Value']
    
    # Imprimir el dataframe final
    print(pivoted_df)
    

    El resultado debería ser:

      Country Country2  Value
    0  France      USA    2.0
    1  France  Germany    4.0
    2   Germany      USA    5.0
    3   Germany  France    7.0
    4      USA   France    3.0
    5      USA  Germany    3.5
    

Comments are closed.