Python 每个id的多行打印

Python 每个id的多行打印,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我想用Python为这个数据集绘制多行代码:(x=year,y=freq) 每个学生id都有不同年份的数据。计数是groupby的结果。 我想为每个学生id设置一行 我试过这样做: df.groupby(['year'])['freq'].count().plot() 但它并没有为每个学生id绘制一条线 欢迎提出任何建议。谢谢你的帮助从你的问题中我不确定你是想要计数(在你的例子中都是1)还是求和,所以我用求和解决了这个问题-如果你想计数,就在第一行用求和 df_ = df.groupby(['

我想用Python为这个数据集绘制多行代码:(x=year,y=freq)

每个学生id都有不同年份的数据。计数是groupby的结果。 我想为每个学生id设置一行

我试过这样做:

df.groupby(['year'])['freq'].count().plot()
但它并没有为每个学生id绘制一条线


欢迎提出任何建议。谢谢你的帮助

从你的问题中我不确定你是想要
计数
(在你的例子中都是1)还是
求和
,所以我用
求和
解决了这个问题-如果你想
计数
,就在第一行用
求和

df_ = df.groupby(['Student_ID', 'Year'])['Freq'].sum()
print(df_)

> Student_ID  Year
A           2010     7
            2012     6
B           2008    22
            2012    13
C           2009    18
D           2012    31
            2013     1
Name: Freq, dtype: int64

fig, ax = plt.subplots()
for student in set(a[0] for a in df_.index):
    df_[student].plot(ax=ax, label=student)
    plt.legend()
    plt.show()
这给了你:


从你的问题中,我不确定你是想要
count
(在你的例子中都是1)还是
sum
,所以我用
sum
解决了这个问题-如果你想要
count
,就用第一行的
sum
换掉它

df_ = df.groupby(['Student_ID', 'Year'])['Freq'].sum()
print(df_)

> Student_ID  Year
A           2010     7
            2012     6
B           2008    22
            2012    13
C           2009    18
D           2012    31
            2013     1
Name: Freq, dtype: int64

fig, ax = plt.subplots()
for student in set(a[0] for a in df_.index):
    df_[student].plot(ax=ax, label=student)
    plt.legend()
    plt.show()
这给了你:



所以你想要一个有4条线的图,其中x轴是几年,y轴是一段时间内的计数?是的,Josh。这是数据集的一个示例。我会有超过4条线,但我想了解如何为每一条线绘制一条线。y轴是一段时间内的计数,在x轴上有年份
seaborn
是为这种类型的图形制作的:
sns.lineplot(data=df,x='year',y='freq',hue='Student\u ID')
。谢谢广华。如果我每年都要计算ID的频率,如果我的数据集中没有这个字段,我可以使用它吗?所以你想要一个有4行的图,其中x轴是几年,y轴是一段时间内的计数?是的,Josh。这是数据集的一个示例。我会有超过4条线,但我想了解如何为每一条线绘制一条线。y轴是一段时间内的计数,在x轴上有年份
seaborn
是为这种类型的图形制作的:
sns.lineplot(data=df,x='year',y='freq',hue='Student\u ID')
。谢谢广华。如果我每年都要计算ID的频率,以防我的数据集中没有该字段,我可以使用它吗?非常感谢Josh的帮助。请允许我问您是否可以这样做,以防,我必须通过计算每
一年的学生id来创建一个新列,而不是列
Freq
?您的意思是仅仅一条线绘制一年的学生人数吗?如果是这样,您可以执行
df.groupby('Year')['Student\u ID'].count()
(或
z.groupby('Year')['Student\u ID'].count().plot()
)是的。如果我有大约100个不同的学生证,我能应用你的建议吗?谢谢你的帮助,乔希,不客气,你会的。试一试,如果它不起作用,也许会提出一个新问题。祝你好运(还要注意,我上面的评论应该是
df.groupby
而不是
z.groupby
)谢谢你,Josh。是的,我为一个新问题提出了一个新问题。谢谢你的帮助和时间,非常感谢乔希的帮助。请允许我问您是否可以这样做,以防,我必须通过计算每
一年的学生id来创建一个新列,而不是列
Freq
?您的意思是仅仅一条线绘制一年的学生人数吗?如果是这样,您可以执行
df.groupby('Year')['Student\u ID'].count()
(或
z.groupby('Year')['Student\u ID'].count().plot()
)是的。如果我有大约100个不同的学生证,我能应用你的建议吗?谢谢你的帮助,乔希,不客气,你会的。试一试,如果它不起作用,也许会提出一个新问题。祝你好运(还要注意,我上面的评论应该是
df.groupby
而不是
z.groupby
)谢谢你,Josh。是的,我为一个新问题提出了一个新问题。谢谢你的帮助和时间