如何对DataFrame双层切片快速计算学生在各学习小组的平均答题表现
高效计算学生各小组平均答题正确率实现方案
直接使用pandas内置的分组聚合能力即可完成需求,无需手动逐一切片,性能提升非常明显:
核心代码
import pandas as pd # 假设你的原始数据集存储在变量df中 # 按学习小组、学生两个维度分组,直接对布尔型的answer列求均值,自动计算正确率 result_df = df.groupby( ["study_group", "student"], as_index=False )["answer"].mean().rename(columns={"answer": "Average"}) # 可选:按需求保留两位小数,匹配示例输出格式 result_df["Average"] = result_df["Average"].round(2)
可选过滤:仅保留加入多个小组的学生
如果后续只需要分析多小组学生的表现差异,可以额外加一层过滤:
# 统计每个学生加入的不同小组数量 student_group_count = df.groupby("student")["study_group"].nunique() # 筛选出加入2个及以上小组的学生ID multi_group_stu_ids = student_group_count[student_group_count >= 2].index # 过滤结果集 multi_group_result = result_df[result_df["student"].isin(multi_group_stu_ids)]
性能说明
上述方案基于pandas底层向量化运算实现,避免了Python层的循环遍历开销,相比手动切片的方案性能提升10~100倍,即使处理百万行级别的数据集也可以快速完成计算。
内容的提问来源于stack exchange,提问作者futuredataengineer
相关产品推荐
相关产品推荐

