Як фільтрувати pandas dataframe за допомогою логічних стовпців


Ви можете використовувати такі методи для фільтрації рядків у pandas DataFrame на основі логічних значень стовпців:

Спосіб 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 ]

Наступні приклади показують, як використовувати кожен метод на практиці з такими pandas DataFrame:

 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 на основі логічного стовпця

Ми можемо використати наступний синтаксис, щоб відфільтрувати pandas DataFrame, щоб він містив лише ті рядки, де значення у стовпці 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 на основі кількох логічних стовпців

Ми можемо використати наступний синтаксис, щоб відфільтрувати pandas DataFrame, щоб він містив лише рядки, де значення стовпця 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: Як перетворити логічні значення в цілі значення

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *