Групповое и круговое построение в pandas

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

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