Python 当一列中的数字等于另一列中的文本时,该列中数字的计数频率
这是来自示例csv 大致上看起来像这5列 剪贴板: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
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'})