У меня есть небольшой фрейм данных, в котором в качестве столбцов указаны student_id, exc_1, exc_2, exc_3, exc_4 и exc_5. В рядах тоже 5 учеников. Что я хотел бы сделать, так это построить гистограмму, показывающую оценки за экзамен одного студента или одну конкретную c строку, и, в конечном итоге, сделать это для каждого или определенного c студента на основе ввода пользователя.
На данный момент, однако, я застрял в том, как построить гистограмму только для одного конкретного c ученика.
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({'student_id': [83838, 16373, 93538, 29383, 58585],
'exam_1': [80, 95, 90, 75, 50],
'exam_2': [60, 92, 88, 85, 40],
'exam_3': [70, 55, 75, 45, 60],
'exam_4': [55, 95, 45, 80, 55],
'exam_5': [91, 35, 92, 90, 75]})
print(df)
Результат:
student_id exam_1 exam_2 exam_3 exam_4 exam_5
0 83838 80 60 70 55 91
1 16373 95 92 55 95 35
2 93538 90 88 75 45 92
3 29383 75 85 45 80 90
4 58585 50 40 60 55 75
Добавление приведенный ниже код позволит мне выбрать только один конкретный c идентификатор студента, также известный как строка:
df = df.loc[df['student_id'] == 29383]
print(df)
student_id exam_1 exam_2 exam_3 exam_4 exam_5
3 29383 75 85 45 80 90
Отсюда я хотел бы отобразить экзамены этого конкретного студента в виде столбчатой диаграммы.
Я пробовал приведенный ниже код, но он не отображает его так, как хотелось бы. Кажется, что индекс этого конкретного ученика используется для отметки на оси x, если вы видите изображение. Он покажет «3» с несколькими столбчатыми графиками вокруг него.
exam_plots_for_29383 = df.plot.bar()
plt.show()
Будет выведен этот столбчатый график: Dataframe с столбчатым графиком. Выглядит странно.
Я попытался транспонировать фрейм данных, и это привело меня к тому, что я хочу. Я использовал этот код ниже:
df = df.T
exam_plots_for_29383_T = df.plot.bar()
plt.show()
Но я получаю это в виде графика: Транспонирование фрейма данных с гистограммой. Все еще выглядит странно.
Я немного застрял. Я знаю, что есть логический способ правильно построить гистограмму из фрейма данных, я просто не могу, хоть убей, понять это.
Я бы хотел, чтобы гистограмма имела:
- Экзамены с 1 по 5 отображаются на оси X.
- Их значения на оси Y.
- Каждая полоса исследования выделена отдельным цветом.
- Легенда, показывающая цвета.
Я думаю, что последние два варианта выполняются автоматически. Только первые два ломают мне мозг. Я благодарен за любую помощь или советы.
Вот полный код на тот случай, если кто-то захочет увидеть его без разделения, как указано выше.
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({'student_id': [83838, 16373, 93538, 29383, 58585],
'exam_1': [80, 95, 90, 75, 50],
'exam_2': [60, 92, 88, 85, 40],
'exam_3': [70, 55, 75, 45, 60],
'exam_4': [55, 95, 45, 80, 55],
'exam_5': [91, 35, 92, 90, 75]})
print(df)
df = df.loc[df['student_id'] == 29383]
print(df)
exam_plots_for_29383 = df.plot.bar()
plt.show()
df = df.T
exam_plots_for_29383_T = df.plot.bar()
plt.show()