Python 当一列中的数字等于另一列中的文本时,该列中数字的计数频率

Python 当一列中的数字等于另一列中的文本时,该列中数字的计数频率,python,pandas,Python,Pandas,这是来自示例csv 大致上看起来像这5列 剪贴板: Year Course Modul Q1 Q2 2015 Physics CS1203 4 2 2015 Physics CS1203 4 3 2015 Physics CS1203 3 1 2015 Physics CS1203 4 4 2015 English IR0001 2 5 2015 English IR0001 1 2 2015 English IR0001 3 1 2015 Engl

这是来自示例csv

大致上看起来像这5列

剪贴板:

Year  Course  Modul Q1 Q2
2015 Physics CS1203  4  2 
2015 Physics CS1203  4  3 
2015 Physics CS1203  3  1 
2015 Physics CS1203  4  4 
2015 English IR0001  2  5 
2015 English IR0001  1  2 
2015 English IR0001  3  1 
2015 English IR0001  5  3 
2015 English IR0001  4  3
代码:

我按模块分组,现在我想计算CS1203模块中的4个。我是新手,如果这是一个愚蠢的问题,请提前道歉。我真的很感谢你的帮助

谢谢你

我想你需要:

如果需要在所有
q
列中计数,请首先使用:


您可以首先按模块过滤DF(
DF.module==“CS1203”
),然后只过滤那些匹配
q\d+
RegEx的列,只选择
4
s,最后计算总和:

In [74]: (df[df.module == 'CS1203'].filter(regex=r'q\d+') == 4).sum()
Out[74]:
q1    3
q2    1
dtype: int64

也许你可以试试这样的东西:

df.groupby(['module','q1'])['module'].agg({'Frequency':'count'})

请参考此内容。

您能将图像添加为文本进行回答吗?感谢@jezrael昨天的帮助,您的回答非常有帮助。不过,我遇到了另一个问题,非常感谢您的帮助。上面的csv文件-我想创建一个函数-当我们运行脚本时,它要求我们输入模块代码。如果模块代码等于列表中的模块,则长度之和为4和5,除以总数*100。当用户输入模块代码时,脚本应返回百分比值。你能帮帮我吗,我怎么做?我真的很感谢你的帮助。
df = pd.melt(df, id_vars=['year','course','module'], value_name='q')
   year   course  module  q1  q2
0  2015  Physics  CS1203   4   2
1  2015  Physics  CS1203   4   3
2  2015  Physics  CS1203   3   1
3  2015  Physics  CS1203   4   4
4  2015  English  IR0001   2   5
5  2015  English  IR0001   1   2
6  2015  English  IR0001   3   1
7  2015  English  IR0001   5   3
8  2015  English  IR0001   4   3

print (df[(df.module == 'CS1203') & (df.q == 4)])
    year   course  module variable  q
0   2015  Physics  CS1203       q1  4
1   2015  Physics  CS1203       q1  4
3   2015  Physics  CS1203       q1  4
12  2015  Physics  CS1203       q2  4

print (len(df[(df.module == 'CS1203') & (df.q == 4)]))
4
In [74]: (df[df.module == 'CS1203'].filter(regex=r'q\d+') == 4).sum()
Out[74]:
q1    3
q2    1
dtype: int64
df.groupby(['module','q1'])['module'].agg({'Frequency':'count'})