如何使用python根据条件创建“count”列?

2024-06-11 08:18:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用过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

基于条件:count+=1,如果id是通过他参加的所有考试,则count=0。你知道吗

因此,输出应如下所示:

预期产量: 获取总值->;总及格学生数为1。你知道吗


Tags: 数据id示例dfcountmathresultscience
2条回答

看来你是在统计没有任何考试不及格(通过所有考试)的学生人数。你的分组方法是对的……但我不知道你为什么要按idtestname分组。你知道吗

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

  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
df = pd.DataFrame({'id': [1, 1, 2, 2, 3],
                   'testname': ['math', 'science', 'math', 'literature', 'math'],
                   'result': ['passed', 'failed', 'passed', 'passed', 'failed']})

如果序列中的所有条目都等于“passed”,则下面的函数返回True。换句话说,如果学生至少一次没有“通过”,则返回False。你知道吗

def verify_all_exams_are_passed(results):
    return results.eq('passed').all()

最后,将函数应用于每个学生(id),以查看哪些学生通过了所有考试。你知道吗

>>> students_passed = df.groupby('id')['result'].apply(verify_all_exams_are_passed)

>>> students_passed
id
1    False
2     True
3    False
Name: result, dtype: bool

你也可以直接对这个系列求和,得到通过所有考试的学生数

>>> total_passed.sum()
1

相关问题 更多 >