Is there a way to put a Pandas pivot_table into a Plotly table?

Question:

I have a pivot table that I created using Pandas pivot_table and want to display the results in an Plotly table. I have successfully filled the index column but am not sure how to fill the rest of the values:

enter image description here

table = table.reset_index()

fig = go.Figure(data=[go.Table(
    header=dict(values=list(table.columns.tolist()),
                fill_color='paleturquoise',
                align='left'),
    cells=dict(values=[table['code']],
               fill_color='lavender',
               align='left'))
])

fig.show()

And here’s a dictionary of the pivoted table:

[{"code":44950,"ABBOTT NORTHWESTERN HOSPITAL":4546.2512817383,"CHILDREN'S HOSPITALS & CLINICS OF MN":7802.2425130208,"HENNEPIN COUNTY MEDICAL CENTER 1":869.4294606802,"PARK NICOLLET METHODIST HOSPITAL":null,"UNIVERSITY OF MINNESOTA MEDICAL CENTER, FAIRVIEW":7898.8365783691},{"code":70450,"ABBOTT NORTHWESTERN HOSPITAL":424.8267141707,"CHILDREN'S HOSPITALS & CLINICS OF MN":2264.7491921216,"HENNEPIN COUNTY MEDICAL CENTER 1":220.6921879649,"PARK NICOLLET METHODIST HOSPITAL":213.5044436985,"UNIVERSITY OF MINNESOTA MEDICAL CENTER, FAIRVIEW":343.2730032114},{"code":76805,"ABBOTT NORTHWESTERN HOSPITAL":367.9092678447,"CHILDREN'S HOSPITALS & CLINICS OF MN":6052.9498485268,"HENNEPIN COUNTY MEDICAL CENTER 1":159.4268743396,"PARK NICOLLET METHODIST HOSPITAL":248.8700002035,"UNIVERSITY OF MINNESOTA MEDICAL CENTER, FAIRVIEW":252.9390616784},{"code":77066,"ABBOTT NORTHWESTERN HOSPITAL":336.7092620511,"CHILDREN'S HOSPITALS & CLINICS OF MN":null,"HENNEPIN COUNTY MEDICAL CENTER 1":127.4571880102,"PARK NICOLLET METHODIST HOSPITAL":null,"UNIVERSITY OF MINNESOTA MEDICAL CENTER, FAIRVIEW":248.553898738},{"code":80048,"ABBOTT NORTHWESTERN HOSPITAL":89.2373663649,"CHILDREN'S HOSPITALS & CLINICS OF MN":170.8316176919,"HENNEPIN COUNTY MEDICAL CENTER 1":43.2383953318,"PARK NICOLLET METHODIST HOSPITAL":23.0844444699,"UNIVERSITY OF MINNESOTA MEDICAL CENTER, FAIRVIEW":45.4282953556},{"code":97110,"ABBOTT NORTHWESTERN HOSPITAL":102.2439455629,"CHILDREN'S HOSPITALS & CLINICS OF MN":83.8876704011,"HENNEPIN COUNTY MEDICAL CENTER 1":58.4574673764,"PARK NICOLLET METHODIST HOSPITAL":90.8655548096,"UNIVERSITY OF MINNESOTA MEDICAL CENTER, FAIRVIEW":69.6076442719},{"code":99203,"ABBOTT NORTHWESTERN HOSPITAL":440.9728189782,"CHILDREN'S HOSPITALS & CLINICS OF MN":200.125572077,"HENNEPIN COUNTY MEDICAL CENTER 1":143.6352518082,"PARK NICOLLET METHODIST HOSPITAL":null,"UNIVERSITY OF MINNESOTA MEDICAL CENTER, FAIRVIEW":null}]

Any help on how to do this would be appreciated. Thanks.

Asked By: Ryan Gifford

||

Answers:

According to https://plotly.com/python/table/#styled-table you can put multiple elements like:

 cells=dict(values=[table['code'],
                    table['ABBOTT NORTHWESTERN HOSPITAL'],
                    table["CHILDREN'S HOSPITALS & CLINICS OF MN"],
                    table["HENNEPIN COUNTY MEDICAL CENTER 1"],
                    table["PARK NICOLLET METHODIST HOSPITAL"],
                    table["UNIVERSITY OF MINNESOTA MEDICAL CENTER, FAIRVIEW"]],
               fill_color='lavender',
               align='left'))

But if you want to reuse your code for different data and make it clean then you can use the following code:

import plotly.graph_objects as go #plotly
import numpy as np #for reshape
#your data
data = [{"code":44950,"ABBOTT NORTHWESTERN HOSPITAL":4546.2512817383,"CHILDREN'S HOSPITALS & CLINICS OF MN":7802.2425130208,"HENNEPIN COUNTY MEDICAL CENTER 1":869.4294606802,"PARK NICOLLET METHODIST HOSPITAL":"null","UNIVERSITY OF MINNESOTA MEDICAL CENTER, FAIRVIEW":7898.8365783691},{"code":70450,"ABBOTT NORTHWESTERN HOSPITAL":424.8267141707,"CHILDREN'S HOSPITALS & CLINICS OF MN":2264.7491921216,"HENNEPIN COUNTY MEDICAL CENTER 1":220.6921879649,"PARK NICOLLET METHODIST HOSPITAL":213.5044436985,"UNIVERSITY OF MINNESOTA MEDICAL CENTER, FAIRVIEW":343.2730032114},{"code":76805,"ABBOTT NORTHWESTERN HOSPITAL":367.9092678447,"CHILDREN'S HOSPITALS & CLINICS OF MN":6052.9498485268,"HENNEPIN COUNTY MEDICAL CENTER 1":159.4268743396,"PARK NICOLLET METHODIST HOSPITAL":248.8700002035,"UNIVERSITY OF MINNESOTA MEDICAL CENTER, FAIRVIEW":252.9390616784},{"code":77066,"ABBOTT NORTHWESTERN HOSPITAL":336.7092620511,"CHILDREN'S HOSPITALS & CLINICS OF MN":"null","HENNEPIN COUNTY MEDICAL CENTER 1":127.4571880102,"PARK NICOLLET METHODIST HOSPITAL":"null","UNIVERSITY OF MINNESOTA MEDICAL CENTER, FAIRVIEW":248.553898738},{"code":80048,"ABBOTT NORTHWESTERN HOSPITAL":89.2373663649,"CHILDREN'S HOSPITALS & CLINICS OF MN":170.8316176919,"HENNEPIN COUNTY MEDICAL CENTER 1":43.2383953318,"PARK NICOLLET METHODIST HOSPITAL":23.0844444699,"UNIVERSITY OF MINNESOTA MEDICAL CENTER, FAIRVIEW":45.4282953556},{"code":97110,"ABBOTT NORTHWESTERN HOSPITAL":102.2439455629,"CHILDREN'S HOSPITALS & CLINICS OF MN":83.8876704011,"HENNEPIN COUNTY MEDICAL CENTER 1":58.4574673764,"PARK NICOLLET METHODIST HOSPITAL":90.8655548096,"UNIVERSITY OF MINNESOTA MEDICAL CENTER, FAIRVIEW":69.6076442719},{"code":99203,"ABBOTT NORTHWESTERN HOSPITAL":440.9728189782,"CHILDREN'S HOSPITALS & CLINICS OF MN":200.125572077,"HENNEPIN COUNTY MEDICAL CENTER 1":143.6352518082,"PARK NICOLLET METHODIST HOSPITAL":"null","UNIVERSITY OF MINNESOTA MEDICAL CENTER, FAIRVIEW":"null"}]

#get header of data
data_columns = list(data[0].keys())
#get values of data and put them in a list
data_values = list(i[j] for j in data_columns for i in data) # I used comprehension expression
#reshape the list because of plotly ordering type.
data_values = np.reshape(data_values, (-1, len(data))) 

#figure for plotly
fig = go.Figure(data=[go.Table(
    header=dict(values=data_columns,
                fill_color='paleturquoise',
                align='left'),
    cells=dict(values=data_values,
               fill_color='lavender',
               align='left'))
])

#show figure
fig.show()

Output picture

picture

Answered By: Furkan Ozalp

A pandas pivot table has a multi-line column header, with the column field above the individual values within that column. Since the accepted answer shows an output without this, it would be equivalent (and easier) to reset the index (drop = False). Looks like you already have the code for making a plotly / go table. See the code below, where pdfTable is your pivot table. You may have to drop a column (which should be the column name that you put in the column argument).

pdfTable = pdfTable.reset_index(drop = False)

Answered By: Brad d
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.