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.

Tabla Plotly Dash: Cómo crear una tabla de múltiples encabezados a partir de un dataframe de Pandas con múltiples encabezados.

Este es un ejemplo de creación de una tabla con múltiples encabezados en Dash, como en los ejemplos de Dash:

import dash
import dash_table
import pandas as pd

app = dash.Dash(name)

app.layout = dashtable.DataTable(
    columns=[
        {"name": ["", "Año"], "id": "year"},
        {"name": ["Ciudad", "Montreal"], "id": "montreal"},
        {"name": ["Ciudad", "Toronto"], "id": "toronto"},
        {"name": ["Ciudad", "Ottawa"], "id": "ottawa"},
        {"name": ["Ciudad", "Vancouver"], "id": "vancouver"},
        {"name": ["Clima", "Temperatura"], "id": "temp"},
        {"name": ["Clima", "Humedad"], "id": "humidity"},
    ],
    data=[
        {
            "year": i,
            "montreal": i * 10,
            "toronto": i * 100,
            "ottawa": i * -1,
            "vancouver": i * -10,
            "temp": i * -100,
            "humidity": i * 5,
        }
        for i in range(10)
    ],
    mergeduplicate_headers=True,
)

if name == 'main':
    app.runserver(debug=True)

[![enter image description here][1]][1]
Este es un ejemplo de mi marco de datos de pandas:

data={('userprofileid', ''): {0: 968, 1: 969},
 ('email', ''): {0: 'aaaa@gmail.com', 1: 'bbbbb@gmail.com'},
 ('results', 'Cope'): {0: 15, 1: 25},
 ('results', 'Baba'): {0: 100, 1: 45},
 ('results', 'Susu'): {0: 120, 1: 75},
 ('results', 'Zizi'): {0: 150, 1: 52},
 ('results', 'Fufu'): {0: 250, 1: 2},
 ('feedback', 'Cope'): {0: 'Bueno', 1: 'No lo probé'},
 ('feedback', 'Baba'): {0: 'Bueno', 1: 'No lo probé'},
 ('feedback', 'Susu'): {0: 'Malo', 1: 'No lo probé'},
 ('feedback', 'Zizi'): {0: 'Malo', 1: 'No lo probé'},
 ('feedback', 'Fufu'): {0: 'Malo', 1: 'No lo probé'}
}
df = pd.DataFrame.fromdict(data)
df

¿Cómo puedo hacer que la tabla de datos de Dash tenga encabezados múltiples como en el ejemplo de mi marco de datos de Pandas con encabezados múltiples?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Puede crear una Dash DataTable con Multi-Headers desde su Pandas Multi-Headers Dataframe utilizando los parámetros columns y data del componente dash_table.DataTable. El parámetro columns debe ser una lista de diccionarios, cada uno conteniendo el nombre y id de la columna. El parámetro data debe ser una lista de diccionarios, cada uno conteniendo el id de la columna y el valor correspondiente. Por ejemplo:

    import dash
    import dash_table
    import pandas as pd
    
    data={('user_profile_id', ''): {0: 968, 1: 969},
     ('email', ''): {0: 'aaaa@gmail.com', 1: 'bbbbb@gmail.com'},
     ('results', 'Cope'): {0: 15, 1: 25},
     ('results', 'Baba'): {0: 100, 1: 45},
     ('results', 'Susu'): {0: 120, 1: 75},
     ('results', 'Zizi'): {0: 150, 1: 52},
     ('results', 'Fufu'): {0: 250, 1: 2},
     ('feedback', 'Cope'): {0: 'Bueno', 1: 'No lo intenté'},
     ('feedback', 'Baba'): {0: 'Bueno', 1: 'No lo intenté'},
     ('feedback', 'Susu'): {0: 'Malo', 1: 'No lo intenté'},
     ('feedback', 'Zizi'): {0: 'Malo', 1: 'No lo intenté'},
     ('feedback', 'Fufu'): {0: 'Malo', 1: 'No lo intenté'}
    }
    
    df = pd.DataFrame.from_dict(data)
    
    app = dash.Dash(nombre)
    
    app.layout = dash_table.DataTable(
        columns=[
            {'name': ['user_profile_id'], 'id': 'user_profile_id'},
            {'name': ['email'], 'id': 'email'},
            {'name': ['results', 'Cope'], 'id': 'results_cope'},
            {'name': ['results', 'Baba'], 'id': 'results_baba'},
            {'name': ['results', 'Susu'], 'id': 'results_susu'},
            {'name': ['results', 'Zizi'], 'id': 'results_zizi'},
            {'name': ['results', 'Fufu'], 'id': 'results_fufu'},
            {'name': ['feedback', 'Cope'], 'id': 'feedback_cope'},
            {'name': ['feedback', 'Baba'], 'id': 'feedback_baba'},
            {'name': ['feedback', 'Susu'], 'id': 'feedback_susu'},
            {'name': ['feedback', 'Zizi'], 'id': 'feedback_zizi'},
            {'name': ['feedback', 'Fufu'], 'id': 'feedback_fufu'},
        ],
        data=[
            {
                'user_profile_id': row['user_profile_id'],
                'email': row['email'],
                'results_cope': row['results']['Cope'],
                'results_baba': row['results']['Baba'],
                'results_susu': row['results']['Susu'],
                'results_zizi': row['results']['Zizi'],
                'results_fufu': row['results']['Fufu'],
                'feedback_cope': row['feedback']['Cope'],
                'feedback_baba': row['feedback']['Baba'],
                'feedback_susu': row['feedback']['Susu'],
                'feedback_zizi': row['feedback']['Zizi'],
                'feedback_fufu': row['feedback']['Fufu']
            } for i, row in df.iterrows()
        ]
    )
    

Comments are closed.