我有一个数据集与标题['Q 36 Marks','Q 37 Marks', ..., 'Q 50 Marks']
在数据框从excel文件。数据包含为0.0,-1.0或4.0。和数据是学生出现在考试。我想创建一个新的变量-分数将添加前10个问号为每个学生是4.0或-1.0。我不能用Pandas做它。
例如如果数据
Q 36 Marks Q 37 Marks ... Q 50 Marks (in all 15 questions) and for student the data is
4 4 -1 0 0 -1 -1 4 -1 4 0 0 -1 -1 4
因此,分数应计算为4+4+(-1)+(-1)+(-1)+4+(-1)+4+(-1)+(-1)
,不考虑最后4个。
我试着找到Pandas函数.sum(axis=1)
,但不知道如何找到条件,以获得只有前10个非零条目到总和函数。
2条答案
按热度按时间au9on6nz1#
您可以对屏蔽值执行
stack
以删除不需要的数据,然后仅对前10个值执行groupby.sum
:输出(仅分数列):
yfjy0ee72#
使用
DataFrame.isin
仅测试筛选列中的-1, 4
值,通过DataFrame.cumsum
测试获得第一个10
,将不匹配值设置为DataFrame.where
中的0
,并将每行的最后一个求和:如果需要处理所有列:
如果需要更改条件,例如,仅
-1
值的求和解决方案发生更改:性能测试,此处为1500行: