#python #pandas #matplotlib
#python #pandas #matplotlib
Вопрос:
У меня есть данные. Отметка — 5 уникальных значений, имя — более 200 человек, группа — 10 значений, собрание — 50 значений, настоящее — максимальное значение равно 20. Каждая встреча состоит из презентаций. Небольшой пример:
data = [
['A', 'Frodo', 'group_1', 1, 1],
['A', 'Sam', 'group_2', 1, 1],
['N', 'Frodo', 'group_1', 1, 2],
['A', 'Sam', 'group_2', 1, 2],
['Z', 'Frodo', 'group_1', 1, 3],
['N', 'Sam', 'group_2', 1, 3],
['M', 'Frodo', 'group_1', 1, 4],
['Z', 'Sam', 'group_2', 1, 4],
['O', 'Frodo', 'group_1', 1, 5],
['A', 'Sam', 'group_2', 1, 5]]
df = pd.DataFrame(data, columns=['mark', 'name', 'group', 'meeting', 'present'])
Я хотел бы получить круговой график для каждой группы, где каждому человеку в нем будут нанесены его оценки «N» в процентах от остальных оценок.
В качестве заголовка я хотел бы указать название группы, и у каждого есть круговой график с именем человека, а внутри графика есть числа в процентах.
plot_df = pd.DataFrame(df.groupby(['name', 'group'])['mark'].value_counts()).rename(columns={'mark':'mark_count'})
plot_df.unstack(level=0).plot(kind='pie', stacked=True, subplots=True, figsize = (7,7), legend=False);
Я подсчитал количество отметок для каждого человека в группе. Я не знаю, как получить процент. Я также строю график для каждого человека, но я не знаю, как группировать графики по группам.
Ответ №1:
Вы можете использовать autopct=
для простого отображения в процентах. Я думаю, что это эффект структуры данных, но вы увидите дополнительное отображение 0%.
plot_df.unstack(level=0).plot(
kind='pie',
stacked=True,
subplots=True,
autopct='%1.1f%%',
figsize=(7, 7),
legend=False,
)