Построить конкретный столбец из таблицы Multindex с помощью Pandas

#python #pandas #matplotlib #aggregate #multi-index

#python #pandas #matplotlib #агрегировать #многоиндексный

Вопрос:

У меня есть create tabale с использованием агрегации в pandas, которая выглядит следующим образом:

 df=df.groupby(['choice mode','required like me']).agg({'mean prop like me ':['mean'],'unhappy':['mean']})

>>>                         mplm          unhappy
choice mode         rlm     mean         mean
ba                  0.2     0.651        11
                    0.3     0.561        12
                    0.6     0.721        10
btc                 0.2     0.891        0
                    0.3     0.124        0
                    0.6     0.321        0
btr                 0.2     0.412        12
                    0.3     0.112        34
                    0.6     0.531        31
 

Таблица представляет собой таблицу multindex.
Я хотел бы создать две диаграммы:
диаграмма первая: x_axis = rlm, y_axis = среднее значение mplm, с тремя линиями — по одной строке на режим выбора
диаграмма вторая: x_axis = rlm, y_axis = среднее значение несчастья, с тремя линиями — по одной строке на режим выбора

Проблема в том, что я не могу разделить недовольство и mplm :

 df.unstack(level=0).plot()
 

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

как вы можете видеть, я получаю 6 строк, и на графике есть все уровни индексов.

Я хочу получить две разные диаграммы со значениями plm от несчастливых значений.

Я мог бы сделать это, нарезав исходную таблицу, чтобы иметь onlu plm или недовольный, а затем выполнить агрегацию и понизить уровень, но я уверен, что есть более разумный способ сделать это

Ответ №1:

Вы можете unstack включить dataframe level=0 , затем выберите столбец multiindex, который вы хотели бы plot :

 s = df.unstack(level=0)
s[('mplm', 'mean')].plot(), s[('unhappy', 'mean')].plot()
 

При желании вы можете drop включить неиспользуемый уровень axis=1 после unstacking включения level=0 :

 s = df.unstack(level=0).droplevel(1, axis=1)
s['mplm'].plot(), s['unhappy'].plot()
 

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