在pandas数据帧中搜索不需要的值

时间:2018-06-15 12:32:23

标签: python pandas

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

(顺便说一句,我知道重复的内容,但我知道如何照顾它。) 这个数据框只是一个例子,该方法应该适用于具有任意数量的任务和学生的数据框。我不知道如何继续。帮助:(

1 个答案:

答案 0 :(得分:1)

这是.isin的一种方式。步骤进行:

  1. 存储您要保留的值。
  2. 标记包含成绩的列。
  3. 检查每个成绩列中的每个条目是否是您要保留的值df[asmt_cols].isin(values_to_keep)
  4. 标记仅包含所需值的行:df[asmt_cols].isin(values_to_keep).all(1)
  5. 使用~取消并过滤。
  6. 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