我有一个数据框,其中包含对1,000名学生的考试题的答案。每行代表1个学生,列则是问题的答案。
我想将每个学生与下一个学生进行比较,然后将他们回答相同问题的数量和回答不同的数量相加。然后,我希望通过比较的结果来确定相同和不同的答案对和
这是我用代码总结正确答案的程度
def match(a,b):
sum_cor=sum(np.logical_and(df.loc[a,]==df.loc[b,],df.loc[a,]==5))
print(sum_cor)
数据
Student Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8
0 5 5 4 5 5 5 2 4
1 5 3 5 5 5 5 2 2
2 5 5 5 5 5 5 5 2
3 5 1 5 5 5 5 5 5
4 5 5 5 5 5 5 5 4
输出
Row_1 Row_2 #_Match #not_matched
L00 L0 5 3
L01 L1 5 3
L02 L2 5 3
答案 0 :(得分:0)
您的输入:
Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8
Student
0 5 5 4 5 5 5 2 4
1 5 3 5 5 5 5 2 2
2 5 5 5 5 5 5 5 2
3 5 1 5 5 5 5 5 5
4 5 5 5 5 5 5 5 4
代码:
def compare(d):
return [sum(d == df.loc[i].values) for i in df.index]
df.set_index('Student', inplace=True)
answer = df.apply(compare, 1).apply(pd.Series)
answer = pd.concat([pd.DataFrame([[i, j, answer.loc[i, j]] for i in range(len(df))])
for j in range(len(df))])
answer = answer.rename(columns={0:'Row_1', 1:'Row_2', 2:'#_Match'})
answer['Row_1'] = 'L' + answer['Row_1'].astype(str)
answer['Row_2'] = 'L' + answer['Row_2'].astype(str)
answer['#not_matched'] = len(df.columns) - answer['#_Match']
输出:
Row_1 Row_2 #_Match #not_matched
0 L0 L0 8 0
1 L1 L0 5 3
2 L2 L0 5 3
3 L3 L0 4 4
4 L4 L0 6 2
0 L0 L1 5 3
1 L1 L1 8 0
2 L2 L1 6 2
3 L3 L1 5 3
...
是您想要的吗?
很抱歉,我的解决方案很大,而且不是最佳解决方案,但希望对您有所帮助。