如何用Python Pandas基于条件创建‘count’列?附失败代码求助
解决Python Pandas统计全合格学生数的问题
我明白你想要统计所有参加的考试都通过的学生总数,之前的groupby写法只是统计了每个学生每门考试的记录条数,完全没贴合你的需求,咱们来一步步修正:
首先明确需求逻辑
我们需要:
- 按学生
id分组 - 检查每个学生的所有
result是否都是passed - 统计满足条件的学生数量
完整实现代码
先把你的字典转换成Pandas DataFrame(你之前可能漏了这一步),然后执行统计:
import pandas as pd # 初始化数据 df = pd.DataFrame({ 'id': [1,1,2,2,3], 'testname': ['math', 'science', 'math', 'literature', 'math'], 'result': ['passed', 'failed', 'passed', 'passed', 'failed'] }) # 按id分组,判断每个学生是否所有考试都通过,然后统计数量 qualified_students = df.groupby('id')['result'].apply(lambda x: all(x == 'passed')).sum() print(qualified_students) # 输出:1,和你的期望一致
如果你需要给原DataFrame添加count列
如果想给每一行都标记对应学生的合格状态(1表示全合格,0表示不合格),可以用transform方法:
# 添加count列 df['count'] = df.groupby('id')['result'].transform(lambda x: 1 if all(x == 'passed') else 0) # 查看处理后的DataFrame print(df) # 输出: # id testname result count # 0 1 math passed 0 # 1 1 science failed 0 # 2 2 math passed 1 # 3 2 literature passed 1 # 4 3 math failed 0 # 统计总合格学生数(去重后统计) total_qualified = df.groupby('id')['count'].first().sum() print(total_qualified) # 输出:1
为什么你之前的代码没生效?
你写的ndf=df.groupby(['id', 'testname']) ['result']. count(),作用是统计每个学生每门考试的记录条数(比如id=1的math有1条记录,science有1条记录),这和你要的“所有考试都通过则计数1”的逻辑完全不匹配,所以得不到你想要的结果。
内容的提问来源于stack exchange,提问作者Jovis ch
相关产品推荐
相关产品推荐

