#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()