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

如何实现筛选正确答题记录并计算对应平均耗时的Python数据分析

数据集处理方案与代码修正

需求拆解

需要完成两项核心处理:

  • 逐题匹配student_answer(第20-43列)与did_he_answer(第69-93列),筛选满足**student_answer=5 且 did_he_answer="Yes"**的答题记录,统计总数
  • 基于上述正确答题记录,计算对应time_taken_to_answer(第45-69列)的平均值,新增列存储该结果

常见代码问题修正

现有代码通常会出现以下逻辑错误:

  1. 列索引混淆1-based/0-based导致列选择错误
  2. 未按对应题目逐行匹配判断条件
  3. 计算平均值时未过滤错误答题的时间数据
  4. 新增列赋值逻辑错误

修正后完整代码

import pandas as pd

# 加载数据集(假设已完成加载,变量名为dataset)
# dataset = pd.read_csv("your_dataset.csv")

# 定位目标列(Python使用0-based索引,转换需求中的1-based列范围)
student_answer = dataset.iloc[:, 19:44]  # 对应第20-43列
did_he_answer = dataset.iloc[:, 68:94]    # 对应第69-93列
time_taken = dataset.iloc[:, 44:70]       # 对应第45-69列

# 验证三组列的数量一致性(确保每道题的三组数据对应)
assert student_answer.shape[1] == did_he_answer.shape[1] == time_taken.shape[1], \
    "错误:三组目标列的数量不匹配,请检查列范围"

# 1. 构建正确答题的掩码,逐题判断条件
correct_answers_mask = (student_answer == 5) & (did_he_answer == "Yes")

# 统计符合条件的总记录数(所有题中正确答题的总次数)
total_correct_count = correct_answers_mask.sum().sum()
print(f"符合答题正确逻辑的记录总数:{total_correct_count}")

# 2. 提取正确答题对应的时间并计算平均值
# 筛选出所有正确答题的时间值,排除无效值
valid_correct_times = time_taken[correct_answers_mask].stack()
average_correct_time = valid_correct_times.mean()

# 新增列并填充平均值
dataset['Average Time Taken for Correct Answer'] = average_correct_time

代码说明

  • 列索引转换:将需求中的1-based列范围转为Python的0-based索引(iloc的切片为左闭右开),确保列选择准确
  • 掩码构建:逐列匹配判断条件,确保每道题的答题状态和答案对应判断
  • 统计逻辑:用sum().sum()统计所有正确答题的总次数;若需统计至少有一道题正确的行数,可替换为correct_answers_mask.any(axis=1).sum()
  • 平均值计算:通过掩码筛选正确答题的时间数据,用stack()将二维时间数据转为一维后计算平均值,避免空值干扰
  • 新增列赋值:将全局平均值填充到新列的所有行,确保数据集结构完整

内容的提问来源于stack exchange,提问作者Nugget

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 12:53:36