Как фильтровать pandas dataframe с использованием логических столбцов


Вы можете использовать следующие методы для фильтрации строк в DataFrame pandas на основе значений логического столбца:

Способ 1. Фильтрация DataFrame на основе логического столбца

 #filter for rows where value in 'my_column' is True
df. loc [df. my_column ]

Способ 2. Фильтрация DataFrame на основе нескольких логических столбцов

 #filter for rows where value in 'column1' or 'column2' is True
df. loc [df. column1 | df. column2 ]

В следующих примерах показано, как использовать каждый метод на практике со следующим DataFrame pandas:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'B', 'C', 'D', 'E', 'F', 'G'],
                   ' points ': [18,20, 25, 40, 34, 32, 19],
                   ' all_star ': [True, False, True, True, True, False, False],
                   ' starter ': [False, True, True, True, False, False, False]})

#view DataFrame
print (df)

  team points all_star starter
0 A 18 True False
1 B 20 False True
2 C 25 True True
3 D 40 True True
4 E 34 True False
5 F 32 False False
6 G 19 False False

Пример 1. Фильтрация DataFrame на основе логического столбца

Мы можем использовать следующий синтаксис, чтобы фильтровать DataFrame pandas, чтобы он содержал только строки, в которых значение в столбце all_star равно True:

 #filter for rows where 'all_star' is True
df. loc [df. all_star ]

	team points all_star starter
0 A 18 True False
2 C 25 True True
3 D 40 True True
4 E 34 True False

Обратите внимание, что DataFrame был отфильтрован и содержит только строки, значение которых в столбце all_star равно True.

Если вместо этого вы хотите отфильтровать строки, в которых all_star имеет значение False, просто введите тильду ( ~ ) перед именем столбца:

 #filter for rows where 'all_star' is False
df. loc [ ~ df. all_star ]

        team points all_star starter
1 B 20 False True
5 F 32 False False
6 G 19 False False

DataFrame теперь отфильтрован и содержит только строки, значение которых в столбце all_star равно False.

Пример 2. Фильтрация DataFrame на основе нескольких логических столбцов.

Мы можем использовать следующий синтаксис, чтобы фильтровать DataFrame pandas, чтобы он содержал только строки, в которых значение столбца all_star или начального столбца равно True:

 #filter for rows where 'all_star' or 'starter' is True
df. loc [df. all_star | df. starter ]

        team points all_star starter
0 A 18 True False
1 B 20 False True
2 C 25 True True
3 D 40 True True
4 E 34 True False

Обратите внимание, что DataFrame был отфильтрован и содержит только строки, значение которых в столбце all_star или starter равно True.

Если вы хотите отфильтровать строки, значение которых в столбцах all_star и starter равно True, вы можете использовать оператор & вместо | оператор:

 #filter for rows where 'all_star' and 'starter' is True
df. loc [df. all_star & df. starter ]

	team points all_star starter
2 C 25 True True
3 D 40 True True

Теперь DataFrame отфильтрован и содержит только строки, в которых значение в столбцах all_star и starter равно True.

Связанный: Разница между loc и iloc в Pandas

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи в pandas:

Pandas: выберите строки из DataFrame, используя логический ряд
Pandas: как создать логический столбец на основе условия
Pandas: Как преобразовать логические значения в целочисленные значения

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *