我有两个pandas dataframe一个是答案键,看起来像这样
0 1 2 3 4 5 6 7 8 9
0 TTTTKEY B C B A D A D D C
另一个数据帧包含学生的答案,如下所示
0 1 2 3 4 5 6 7 8 9
0 182 C C C A D A D D C
1 184 C C B A D C A D C
我想知道如何将值更改为1,如果学生的答案与答案键匹配,并将值更改为0,如果学生的答案与答案键不匹配。我认为这可以使用嵌套的for循环,但可能有不同的方法来实现。
您可以使用np.where()
import numpy as np
df2.iloc[:,1:] = np.where(df1.values[:,1:] == df2.values[:,1:], 1, 0)
In [34]: df2
Out[34]:
0 1 2 3 4 5 6 7 8 9
0 182 0 1 0 1 1 1 1 1 1
1 184 0 1 1 1 1 0 0 1 1
假设数据框名为df1
和df2
,则可以运行
is_equal = df1.values[:,1:] == df2.values[:,1:]
is_equal
将是带有1和0的numpy数组。您可以使用is_equal.astype(int)
将其转换为0和1。您可以将其封装在一个数据框中,如果您愿意,可以将其添加回0列。
使用说明:
cols = df_2.columns
df_2[cols[1:]] = df_2[cols[1:]].eq(df_1[cols[1:]].loc[0]).astype(int)
输出:
0 1 2 3 4 5 6 7 8 9
0 182 0 1 0 1 1 1 1 1 1
1 184 0 1 1 1 1 0 0 1 1
最简单的方法是这样做:
for i in range(1, 9 + 1): # Assuming 9 is the last question number
students[i] = students[i] == answers.loc[0][i]
结果数据框将包含True或False,而不是1和0,但我认为它解决了你的问题