Как фильтровать 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: Как преобразовать логические значения в целочисленные значения