问题描述
我有一个数据框架,可回答1000名学生的考试问题。 每行代表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
1楼
您的输入:
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
...
是你想要的吗?
抱歉,我的解决方案很大,而且不是最佳解决方案,但希望对您有所帮助。