удаление нескольких условий - PullRequest
0 голосов
/ 24 апреля 2020

Я хотел бы выбрать подмножество моего фрейма данных, которое удовлетворяет следующему условию: у меня есть фрейм данных, который показывает результаты различных тестов трех студентов. Как только один из студентов получает «плохой» результат, он не может быть рассмотрен для эксперимента и должен быть удален из набора данных. Мой Dataframe выглядит следующим образом:

import pandas as pd

data = {'Name':  ['Peter', 'Peter','Anna', 'Anna','Anna', 'Max'],
        'Result': ["Good", "Good", "Good", "Good", "poor", "Very Good"],
         }

df = pd.DataFrame (data, columns = ['Name','Points'])

Это означает, что мне сначала нужно посмотреть, кто сделал плохо, а затем удалить каждую строку с этим человеком в нем. Мой желаемый результат в этом примере будет:

df_res = pd.DataFrame({'Name': ('Peter', 'Peter', 'Max', 'Max'), 
                   'Result': ("Good", "Good", "Very Good")}) 

Может кто-нибудь помочь мне здесь? Особенно удаление всех строк с соответствующими именами для меня является препятствием для меня.

1 Ответ

3 голосов
/ 24 апреля 2020

Найдите Name s элементов, которые имеют 'poor' Result, затем используйте это для фильтрации записей, которых Name s нет в этом списке.

>>> df = pd.DataFrame(data) # leave out the columns parameter.
>>>
>>> df[~df.Name.isin(df[df.Result == 'poor'].Name.values)]
    Name     Result
0  Peter       Good
1  Peter       Good
5    Max  Very Good

"Boolean маскировка "Я думаю, что мы называем это.

Разве мы не немного несправедливы по отношению к Анне - у нее более хорошие результаты, чем у всех остальных. Так что ... у нее был плохой день ...

=) в любом случае ...

Вы также можете специально использовать метод .drop():

>>> df.drop(index=df[df.Name.isin(df[df.Result == 'poor'].Name)].index)
    Name     Result
0  Peter       Good
1  Peter       Good
5    Max  Very Good
...