Python初学者在这里!我正在尝试创建一个简单的程序来对学生进行评分(在丹麦评分系统中,我知道这很奇怪)。这是我的数据框,其中包含学生及其每项作业的成绩,我希望能够在作业列中搜索不需要的值。我想保留的值是 12、10、7、4、2、0 和 -3。
StudentID Name Assignment1 Assignment2 Assignment3
0 s123456 Michael Andersen 7 7 4
1 s123789 Bettina Petersen 12 11 10
2 s123468 Thomas Nielsen -3 7 2
3 s123579 Marie Hansen 0 2 2
4 s123588 Amalie Jensen 10 5 7
5 s123588 Amalie Jensen 10 7 7
6 s123540 Helena Bentsen 10 10 12
7 s123019 Bent Knudsen 4 4 4
8 s123019 Mattias Kjeldsen 4 4 20
9 s120079 Robert Madsen 4 7 10
10 s129834 Robert Madsen 12 12 12
11 s120068 Camilla Madsen 7 7 10
包含不需要的值的行应显示如下:
StudentID Name Assignment1 Assignment2 Assignment3
1 s123789 Bettina Petersen 12 11 10
4 s123588 Amalie Jensen 10 5 7
8 s123019 Mattias Kjeldsen 4 4 20
(顺便说一句。我知道重复项,但我知道如何处理它。) 该数据框只是一个示例,该方法应该适用于具有任意数量作业和学生的数据框。我不知道如何继续。帮助:(
最佳答案
这是使用 .isin
的一种方法。步骤:
- 存储您想要保留的值。
- 标记包含成绩的列。
- 检查每个成绩列中的每个条目是否是您要保留的值
df[asmt_cols].isin(values_to_keep)
。 - 标记仅包含所需值的行:
df[asmt_cols].isin(values_to_keep).all(1)
。 - 使用
~
和过滤器求反。
values_to_keep = [12, 10, 7, 4, 2, 0, -3]
asmt_cols = [c for c in df.columns if c.startswith("Assignment")]
unwanted = df[~df[asmt_cols].isin(values_to_keep).all(1)]
# Out[99]:
# StudentID Name Assignment1 Assignment2 Assignment3
# 1 s123789 Bettina Petersen 12 11 10
# 4 s123588 Amalie Jensen 10 5 7
# 8 s123019 Mattias Kjeldsen 4 4 20
关于python - 在 pandas 数据框中搜索不需要的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50875705/