计算列中数字的频率,同时等于另一列中的文本

时间:2016-06-01 19:24:26

标签: 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 English IR0001  5  3 
2015 English IR0001  4  3

代码:

df = pd.read_clipboard()

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

谢谢

3 个答案:

答案 0 :(得分:2)

我认为你需要boolean indexing

q

如果需要计算所有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 列,请先使用melt

{{1}}

答案 1 :(得分:2)

您可以先按模块(df.module == 'CS1203')过滤DF,然后过滤列,仅选择匹配q\d+ RegEx的列,仅选择4,最后计算总和:

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

答案 2 :(得分:1)

也许你可以尝试这样的事情:

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

请参阅此post