Как мы можем отображать данные из многоиндексного фрейма данных на тепловой карте?

#python #python-3.x #pandas #plotly

Вопрос:

Я вращаю фрейм данных вот так.

 pvt = pd.pivot_table(df_build, values='Expense', index=['Name'], columns=['Comments', 'Venue'], aggfunc=np.sum)
pvt = pvt.fillna(0)
pvt.columns
 

Теперь у меня есть фрейм данных с этими столбцами.

 MultiIndex([(       'Build',        'Arena'),
            (       'Build',      'Stadium'),
            (       'Add',          'Arena'),
            (       'New',        'Stadium'),
            (       'Replace',      'Arena')],
           names=['Comments', 'Venue'])
 

Я пытаюсь отобразить эти данные в виде тепловой карты. Я бы предпочел использовать Сюжетно, но Сиборн тоже хорош. Я думал, что приведенный ниже код сработает, но это не так.

 df_fin = pvt.reset_index().pivot(columns='Comments', index='Venue', values='Expense')
ax = sns.heatmap(df_fin)
ax.plot()
 

Может быть, должно произойти какое-то расплавление. Не уверен. Как я могу отобразить эти данные в виде тепловой карты?

Ответ №1:

  • смоделировали то, что я считаю структурой вашего сводного фрейма данных
  • суть состоит в том, чтобы изменить форму этого фрейма данных, чтобы сделать его совместимым с https://plotly.com/python/heatmaps/#heatmap-with-plotlyexpress-and-pximshow
    • stack() ось y тепловой карты
    • убедитесь, что индекс находится только на одном уровне ( droplevel() )
    • сгенерировать рисунок
 import pandas as pd
import numpy as np
import plotly.express as px

# build df that matches pivoted df
df = pd.DataFrame(
    index=pd.MultiIndex.from_arrays(
        [
            ["Build", "Build", "Add", "New", "Replace"],
            ["Arena", "Stadium", "Arena", "Stadium", "Arena"],
        ],
        names=["Comments", "Venue"],
    ),
    data = np.random.randint(1,5,5)
).T

# now restructure it for plotly
dfp = df.stack("Venue").droplevel(0,0)

# finally a simple plotly figure...
px.imshow(dfp.values, x=dfp.columns, y=dfp.index)


 

введите описание изображения здесь

Комментарии:

1. Работает отлично! Спасибо за помощь здесь!!