获取 m 个值中 n 个错误回答的行

may*_*our 5 python dataframe pandas

我有一个这样的数据框:

right_answer   rater1   rater2   rater3   item
1              1        1        2        S01
1              1        2        2        S02
2              1        2        1        S03
2              2        1        2        S04
Run Code Online (Sandbox Code Playgroud)

我需要在“项目”中获取那些行或值,其中三个评分者中至少有两个给出了错误的答案。我已经可以检查所有评分者是否都同意此代码:

df.where(df[['rater1', 'rater2', 'rater3']].eq(df.iloc[:, 0], axis=0).all(1) == True)
Run Code Online (Sandbox Code Playgroud)

我不想用多数票来计算列,因为也许我需要调整必须同意或不同意正确答案的评分者的数量。

感谢帮助

Shu*_*rma 4

使用,DataFrame.filter过滤包含像 之类的列的数据帧rater,然后使用DataFrame.ne沿axis=0比较包含列 的列raterright_answer然后使用DataFrame.sum沿axis=1得到raters给出错误答案的人数,然后使用Series.ge创建布尔掩码,最后使用此过滤数据帧行mask

mask = (
    df.filter(like='rater')
    .ne(df['right_answer'], axis=0).sum(axis=1).ge(2)
)

df = df[mask]
Run Code Online (Sandbox Code Playgroud)

结果:

# print(df)

   right_answer  rater1  rater2  rater3 item
1             1       1       2       2  S02
2             2       1       2       1  S03
Run Code Online (Sandbox Code Playgroud)