Вы можете использовать следующий синтаксис для выполнения фильтра «НЕ В» в кадре данных pandas:
df[ ~ df['col_name']. isin (values_list)]
Обратите внимание, что значения в values_list могут быть либо числовыми значениями, либо символьными значениями.
В следующих примерах показано, как использовать этот синтаксис на практике.
Пример 1. Выполнение фильтра «НЕ ВХОД» с одним столбцом
В следующем коде показано, как отфильтровать кадр данных pandas для строк, в которых имя команды отсутствует в списке имен:
import pandas as pd
#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'B', 'B', 'B', 'B', 'C', 'C'],
'points': [25, 12, 15, 14, 19, 23, 25, 29],
'assists': [5, 7, 7, 9, 12, 9, 9, 4],
'rebounds': [11, 8, 10, 6, 6, 5, 9, 12]})
#define list of teams we don't want
values_list = ['A', 'B']
#filter for rows where team name is not in list
df[ ~ df['team']. isin (values_list)]
team points assists rebounds
6 C 25 9 9
7 C 29 4 12
И следующий код показывает, как фильтровать DataFrame pandas для строк, где столбец «точки» не содержит определенных значений:
import pandas as pd
#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'B', 'B', 'B', 'B', 'C', 'C'],
'points': [25, 12, 15, 14, 19, 23, 25, 29],
'assists': [5, 7, 7, 9, 12, 9, 9, 4],
'rebounds': [11, 8, 10, 6, 6, 5, 9, 12]})
#define list of values we don't want
values_list = [12, 15, 25]
#filter for rows where team name is not in list
df[ ~ df['team']. isin (values_list)]
team points assists rebounds
3 B 14 9 6
4 B 19 12 6
5 B 23 9 5
7 C 29 4 12
Пример 2. Выполнение фильтра «НЕ В» с несколькими столбцами
В следующем коде показано, как отфильтровать DataFrame pandas для строк, в которых имена определенных команд отсутствуют в одном из нескольких столбцов:
import pandas as pd
#create DataFrame
df = pd.DataFrame({'star_team': ['A', 'A', 'B', 'B', 'B', 'B', 'C', 'C'],
'backup_team': ['B', 'B', 'C', 'C', 'D', 'D', 'D', 'E'],
'points': [25, 12, 15, 14, 19, 23, 25, 29],
'assists': [5, 7, 7, 9, 12, 9, 9, 4],
'rebounds': [11, 8, 10, 6, 6, 5, 9, 12]})
#define list of teams we don't want
values_list = ['C', 'E']
#filter for rows where team name is not in one of several columns
df[ ~ df[['star_team', 'backup_team']]. isin (values_list).any (axis= 1 )]
star_team backup_team points assists rebounds
0 A B 25 5 11
1 A B 12 7 8
4 B D 19 12 6
5 B D 23 9 5
Обратите внимание, что мы отфильтровали каждую строку, где команды «C» или «E» появлялись либо в столбце «star_team», либо в столбце «backup_team».
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные операции фильтрации в pandas:
Как отфильтровать фрейм данных Pandas по значениям столбцов
Как фильтровать строки Pandas DataFrame по дате
Как фильтровать кадр данных Pandas по нескольким условиям