Как использовать фильтр «НЕ В» в Pandas (с примерами)


Вы можете использовать следующий синтаксис для выполнения фильтра «НЕ В» в кадре данных 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 по нескольким условиям