当前位置: 代码迷 >> python >> 比较熊猫数据框中的行,以确定匹配的不匹配模式
  详细解决方案

比较熊猫数据框中的行,以确定匹配的不匹配模式

热度:71   发布时间:2023-07-16 10:16:50.0

我有一个数据框架,可回答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

您的输入:

         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
...

是你想要的吗?

抱歉,我的解决方案很大,而且不是最佳解决方案,但希望对您有所帮助。

  相关解决方案