#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) Это то, что мне нужно, однако я столкнулся с проблемой, что вся графика отображается в одной форме. Я хотел бы разделить их, как это было раньше