用1和0填充DataFrame



我有两个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

假设数据框名为df1df2,则可以运行

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,但我认为它解决了你的问题

相关内容

  • 没有找到相关文章

最新更新