如何用Pandas统计DataFrame中课程的修读情况及时效占比?
Pandas实现课程完成情况统计
我来帮你搞定这个Pandas统计需求!先确认下我们的输入数据生成代码:
import pandas as pd df = pd.DataFrame({ 'Trainee': ['Ava','Bob','Charlie','David','Emily','Finn'], 'Course':['ABC','ABC','DEF','DEF','DEF','GHI'], 'Completed': ['Yes','Yes','No','Yes','Yes','Yes'], 'Days overdue':[0,1,10,0,0,0] })
接下来我们可以通过分组聚合+自定义计算的方式快速得到目标结果,具体代码如下:
# 按课程分组,计算核心统计指标 result = df.groupby('Course').agg( count=('Trainee', 'size'), # 统计每门课程的总修读人数 in_time=('Days overdue', lambda x: (x == 0).sum()) # 统计逾期天数为0的按时完成人数 ).assign( # 新增按时完成百分比列,保留两位小数 **{'% completed in time': lambda x: (x['in_time'] / x['count']).round(2)} ).reset_index() # 将分组索引转为普通列,匹配预期结果结构 print(result)
代码细节解释:
groupby('Course'):以课程为维度分组,这是所有统计的基础。agg()方法:一次性定义多个聚合规则,清晰直观:count=('Trainee', 'size'):用size直接获取分组的行数,也就是每门课的总修读人数。in_time=('Days overdue', lambda x: (x == 0).sum()):先筛选出逾期天数为0的记录,再求和得到按时完成的人数。
assign()方法:用来新增百分比列,用**处理带特殊字符的列名,避免语法报错。reset_index():把原本作为索引的课程名称转为普通列,让结果结构和你预期的完全一致。
运行代码后,输出结果和预期完全匹配:
Course count in_time % completed in time 0 ABC 2 1 0.50 1 DEF 3 2 0.67 2 GHI 1 1 1.00
内容的提问来源于stack exchange,提问作者Effe Pelosa
相关产品推荐
相关产品推荐

