首页 > 解决方案 > 如何使用 python pandas 根据条件创建“计数”列?

问题描述

我已经像下面这样使用了 groupby 但它没有用:

df={ 'id' :[1,1, 2,2, 3], 'testname' : ['math', 'science', 'math', 'literature', 'math'], 'result' :['passed', 'failed', 'passed', 'passed', 'failed'}


    ndf=df.groupby(['id', 'testname']) ['result']. count() 

示例数据框:

Id  testname.    result
1.     math.           passed
1.     science.      failed 
2.     math.           passed
2.     literature.    passed
3.     math.           failed

基于条件:如果 id 通过了他参加的所有考试,则 count+=1,否则 count=0。

因此,输出应该是这样的:

预期输出:得到一个总值 - >总及格学生将为 1。

标签: pythonpandaspandas-groupby

解决方案


您似乎正在计算没有任何失败测试(通过所有测试)的学生人数。你在分组的正确轨道上......但我不确定你为什么要按idand分组testname

有时在这些类型的问题中,您正在寻找“没有任何负面结果的问题”,您可以更轻松地计算具有任何负面结果的问题,然后从原始数据集大小中减去。这是一种方法:

  1. 使用过滤查找任何失败的行
  2. 按 id 对结果进行分组,所以现在我们有一个基础来计算每个失败的人
  3. 从唯一ID的原始数量中减去该计数

注意:你当然可以把这些东西连在一起,我只是为了清楚起见把它分开了。

In [25]: df                                                                     
Out[25]: 
   id    testname  result
0   1        math  passed
1   1     science  failed
2   2        math  passed
3   2  literature  passed
4   3        math  failed

In [26]: failed_df = df[df['result']=='failed']                                 

In [27]: ids_with_failures = len(failed_df)                                     

In [28]: tot_ids = len(df.groupby('id'))                                        

In [29]: count = tot_ids - ids_with_failures                                    

In [30]: count                                                                  
Out[30]: 1

推荐阅读