You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:00:23