python - 如何使用 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。
解决方案
您似乎正在计算没有任何失败测试(通过所有测试)的学生人数。你在分组的正确轨道上......但我不确定你为什么要按id
and分组testname
。
有时在这些类型的问题中,您正在寻找“没有任何负面结果的问题”,您可以更轻松地计算具有任何负面结果的问题,然后从原始数据集大小中减去。这是一种方法:
- 使用过滤查找任何失败的行
- 按 id 对结果进行分组,所以现在我们有一个基础来计算每个失败的人
- 从唯一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
推荐阅读
- mysql - MySQL 无法访问 root@localhost
- php - 如何在后台执行长时间的任务?
- json - 如何访问 data.d.results 上的这些数据
- r - R中GIS地图的自动标签放置
- python - 迭代一段时间后,前向传递速度变慢了 10000 倍
- webpack - 与 webpack 捆绑时模块未找到纱线 2
- image - 转换的 tfjs 模型抛出模型配置空错误
- arrays - 将用户值存储在数组中,然后使用 bash 比较这些变量
- directory - 用户如何选择桌面上要使用 applescript 使用数字名称创建的文件夹数量?
- firebase - Firebase - 缺少 IAM 权限“cloudscheduler.jobs.update”