Поиск нежелательных значений в панде

1

Начинающий 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

(Кстати, я знаю о дубликатах, но я знаю, как позаботиться об этом.) Этот фреймворк - это всего лишь пример, и этот метод должен работать на dataframes с любым количеством назначений и учеников. Я не знаю, как это сделать. Помогите :(

Теги:
pandas

1 ответ

1
Лучший ответ

Вот один из способов с .isin. шаги:

  1. Сохраняйте значения, которые вы хотите сохранить.
  2. Отметьте столбцы, содержащие оценки.
  3. Убедитесь, что каждая запись в каждом столбце класса является значением, которое вы хотите сохранить df[asmt_cols].isin(values_to_keep).
  4. Отметьте строки, которые имеют только нужные значения: df[asmt_cols].isin(values_to_keep).all(1).
  5. Отменить с ~ и фильтровать.

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
  • 1
    Это сработало! Спасибо, ты гений человека! <3

Ещё вопросы

Сообщество Overcoder
Наверх
Меню