使用Pandas计算学生前10个有效考试题目累加分数的问题
筛选DataFrame每行前10个非0分数求和方案
针对你需要计算每行前10个非0(即4.0或-1.0)分数总和的需求,这里提供两种实现方式:
方法一:用Pandas的apply函数(简洁直观)
假设你的成绩DataFrame名为df,直接通过apply对每行执行筛选、取前10项、求和的操作:
df['score'] = df.apply(lambda row: row[row != 0].head(10).sum(), axis=1)
代码逻辑拆解:
row[row != 0]:筛选当前行中所有非0的有效分数.head(10):提取筛选后的前10个有效分数.sum():对这10个分数求和axis=1:指定对每行执行上述操作
方法二:用Numpy实现(大数据量下更高效)
如果你的数据集很大,apply效率较低,可以用Numpy数组处理:
import numpy as np # 将DataFrame转换为Numpy数组 score_array = df.values # 遍历每行计算分数 score_list = [] for row in score_array: # 筛选非0元素,取前10个求和 valid_scores = row[row != 0] score_list.append(valid_scores[:10].sum()) # 将结果添加为新列 df['score'] = score_list
验证示例
以你给出的学生数据为例:[4,4,-1,0,0,-1,-1,4,-1,4,0,0,-1,-1,4],非0有效项为[4,4,-1,-1,-1,4,-1,4,-1,-1,4],取前10项求和结果为10,两种方法都能得到正确结果。
内容的提问来源于stack exchange,提问作者nichas
相关产品推荐
相关产品推荐

