ブール列を使用して 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またはstart列の値が 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_starstarter列の値が 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

これで、データフレームがフィルタリングされ、 all_star 列starter列の値が True である行のみが含まれるようになりました。

関連: Pandas での loc と iloc の違い

追加リソース

次のチュートリアルでは、パンダで他の一般的なタスクを実行する方法を説明します。

パンダ: ブール値系列を使用して DataFrame から行を選択します
Pandas: 条件に基づいてブール列を作成する方法
Pandas: ブール値を整数値に変換する方法

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です