按组分组并绘图,使用pandas

3

我有数据。 有一些人参加会议。会议被分为演讲。每个会议和演讲组合都有一定数量的参与者。一个会议中的参与者数量不会改变。换句话说,参与者数量只会在会议之间发生变化。

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);

enter image description here

然而,我想给这个图表添加一个标题作为分组名称,并在y轴上签名。当我在所有数据上运行此代码时,我遇到了一个问题,由于某种原因,图表上出现了额外的点。 enter image description here

在第一个图表中,计数应该从会议27开始,并且在会议区域40有异常。 在第二个图表中,会议区域27存在异常情况。


你的 pandas 版本是多少? print(pd.__version__) - Erfan
pandas 版本为 1.0.5。 - savchart
1个回答

1
自从 pandas >= 1.1.0 版本,我们在 DataFrame.plot 中增加了 ylabel 参数。此外,我们将稍微改写您的 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
    )

plots


但我仍然有额外点的问题。我决定再分组一次,并对每个会议取平均值。对于 grp,d in df.groupby('group_name'): d.groupby('meeting').mean()['members'].plot(title=grp)这是我需要的,但我遇到了一个问题,所有图形都以相同的形式显示。我想像以前那样把它们分开。 - savchart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接