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)
我不想用多数票来计算列,因为也许我需要调整必须同意或不同意正确答案的评分者的数量。
感谢帮助
使用,DataFrame.filter过滤包含像 之类的列的数据帧rater,然后使用DataFrame.ne沿axis=0比较包含列 的列rater,right_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)