GroupBy и построение графика с помощью pandas

#python #pandas #matplotlib

#python #pandas #matplotlib

Вопрос:

У меня есть данные. Есть несколько групп людей, которые участвуют в собраниях. Собрания делятся на выступления. В каждой комбинации собраний и выступлений есть несколько участников. Количество участников на одном собрании не меняется. Другими словами, количество участников меняется только от собрания к собранию.

 data = [
 ['group_1', 1, 1, 68],
 ['group_2', 1, 1, 35],
 ['group_1', 1, 2, 68],
 ['group_2', 1, 2, 35],
 ['group_1', 2, 1, 78],
 ['group_2', 2, 1, 25],
 ['group_1', 2, 2, 78], 
 ['group_2', 2, 2, 25],
 ['group_1', 3, 1, 73], 
 ['group_2', 3, 1, 30],
 ['group_1', 3, 2, 73], 
 ['group_2', 3, 2, 30]]
df = pd.DataFrame(data, columns=['group_name', 'meeting', 'present', 'members'])
  

X — собрание, y — количество участников. Я хочу построить что-то вроде этого.

 df.groupby(['group_name']).plot(
         x='meeting', y='members',
         color='#4b0082', linewidth=3,
         marker='h', markerfacecolor='lightgreen', markeredgewidth=1, markersize=9, markevery=1);
  

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

Тем не менее, я хотел бы добавить заголовок в качестве имени группы и подписать ось y. и у меня также возникает проблема, когда я запускаю этот код для всех данных, по какой-то причине у меня есть дополнительные точки на графике.
введите описание изображения здесь

На первом графике отсчет должен начинаться с собрания 27, а в области собрания 40 наблюдается аномалия. На втором графике есть аномалии в области 27 собраний.

Комментарии:

1. Какая у вас версия pandas? print(pd.__version__) ?

2. версия pandas 1.0.5

Ответ №1:

Поскольку pandas >= 1.1.0 у нас есть ylabel аргумент в DataFrame.plot . Также мы немного перепишем ваш groupby, чтобы мы могли получить доступ к имени группы:

 for grp, d in df.groupby('group_name'):
    d.plot(
        x='meeting',
        y='members',
        color='#4b0082',
        ylabel='members',
        title=grp,
        linewidth=3,
        marker='h',
        markerfacecolor='lightgreen',
        markeredgewidth=1,
        markersize=9,
        markevery=1
    )
  

графики

Комментарии:

1. Но у меня все еще есть проблема с дополнительной точкой. Я решил сделать еще одну группировку и использовать среднее значение для каждой встречи. для grp, d в df.groupby(‘имя_группы’): d.groupby(‘собрание’).mean()[‘участники’].plot(title=grp) Это то, что мне нужно, однако я столкнулся с проблемой, что вся графика отображается в одной форме. Я хотел бы разделить их, как это было раньше