Создание линейного графика из фрейма данных с индексом в два столбца

#python #pandas #matplotlib #multi-index #line-plot

#python #pandas #matplotlib #многоиндексный #line-plot

Вопрос:

У меня есть следующий фрейм данных:

 >>>                          mean_traf_tie
    a      d        c
    0.22  0.99      0.11      22
                    0.23      21
                    0.34      34
                    0.46      45
    0.44  0.99      0.11      45
                    0.23      65
                    0.34      66
                    0.46      68
    0.50  0.50      0.11      22
                    0.23      12
                    0.34      34
                    0.46      37
...
 

Я хочу создать график из этого фрейма данных таким образом, чтобы c было осью X, y будет средней скоростью, а линии будут соответствовать столбцам a и d, так что, например, одна строка будет для a = 0,22 и d = 0,99, x будет cи y будет средней скоростью, а затем 2-я строка будет для a = 0,44 и d = 0,99 и т. Д.

Я пытался сделать это так:

 df.plot()
 

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

(значения отличаются в исходном фрейме данных).

как вы можете видеть, по какой-то причине он отображает по оси x a, d и создает только одну строку.

Я попытался исправить это следующим образом:

 df.unstack(level=0).plot(figsize=(10,6))
 

но затем я получил очень странный график с правильными линиями по a и d, но неправильной осью x:
введите описание изображения здесь

Как вы можете видеть, он каким-то образом отображает значения a, d, но это не то, что я хочу — я хочу, чтобы это были столбцы c, а затем создавать строки на основе столбцов a, d, которые предполагают создание непрерывной строки. У меня тоже есть trid:

 df[('mean_traf_tie')].unstack(level=0).plot(figsize=(10,6))
plt.xlabel('C')
plt.ylabel('mean_traf_tie')
 

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

Желаемый результат будет иметь столбец c в качестве оси x, значение mean_traf_tie в качестве оси y, а строки будут сгенерированы bseed для столбцов a и d (строка для 0.22 и 0.99, строка для 0.44 и 0.99 и т.д.).

Ответ №1:

Обновление: мне удалось просмотреть его, объединив два столбца индекса в один, прежде чем строить график следующим образом:

 df['a,d'] = list(zip(df.a, df.d))

df=df.groupby(['a,d','C']).mean()

df.unstack(level=0).plot(figsize=(10,6))
 

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

legenss по-прежнему не идеалистичен, но я получил линии и оси так, как хотел.

Если у кого-нибудь есть лучшая идея, как это сделать с исходными столбцами, я все еще открыт для изучения.