【Pandas】bool値(True/False)のデータを抽出、数をカウントする方法[Python]

  • URLをコピーしました!
目次

Pandas

今回はPandasのデータがBool値(True/False)の場合のデータの抽出方法、そして条件に合う行、列のカウント方法を勉強していきます。

これまで私がPandasのデータとして扱っていたのは数値が中心でした。

しかし、あるデータベースを作成していたときに、Bool値を使って分類しみたら、それをどうやって抽出したらいいのか、カウントしたらいいのか分からなくて調べたので、せっかくだから記事にしようというのが今回は発端。

ということでまずはBool値をもつデータフレームを作成します。

import pandas as pd
import random

num_columns = 5
num_rows = 10

TrueFalse = [True, False]

array_list = []
for i in range(num_rows):
    array_list.append(random.choices(TrueFalse, k=num_columns))
    
columnname_list = [f'column{i}' for i in range(num_columns)]
    
df = pd.DataFrame(data=array_list, columns=columnname_list)

df

True、Falseをリストに格納し、それを「random.choices」で必要な数だけ抽出し、2次元配列を作成しています。

ちなみにそのままPandasのデータフレームにすると、行列の名前が「0, 1, 2, 3, 4, 5…」と同じ名前になってしまうので、別途、列名用に「columnname_list」を準備しています。

これでランダムにTrue/Falseの値をもつデータフレームができました。

特定の列がTrue、またはFalseの行を取得

まずは特定の列がTrue、もしくはFalseになっている行を取得してみます。

その場合は「df[df[‘カラム名’] == True]」もしくは「df[df[‘カラム名’] == False]」とします。

今回はTrueの場合だけ試してみましょう。

df1 = df[df['column1'] == True]

df1

複数の列の条件を指定する方法

さらに複数の列の条件を指定する場合は「&」(両方とも)、「|」(または)を使用します。

このときそれぞれの条件は括弧で括る必要があるので注意です。

df2 = df[(df['column1'] == True)&(df['column4'] == True)]

df2
df3 = df[(df['column1'] == True)|(df['column4'] == True)]

df3

それぞれの列のTrue、もしくはFalseの数をカウント

次にそれぞれの列のTrue、もしくはFalseの数をカウントしてみましょう。

Trueの数を数えるには「(df == True).sum()」とします。

Falseの場合は「(df == False).sum()」です。

print((df == True).sum())

実行結果
column0    8
column1    3
column2    3
column3    6
column4    5
dtype: int64

それぞれの行のTrue、もしくはFalseの数をカウント

それぞれの行のTrueの数を数えるには「(df == True).sum(axis=1)」とします。

Falseの場合は「(df == False).sum(axis=1)」です。

print((df == True).sum(axis=1))

実行結果
0    3
1    2
2    2
3    2
4    1
5    4
6    3
7    4
8    2
9    2
dtype: int64

特定の列にTrue、もしくはFalseが指定した数だけある行を抽出

最後に特定の列にTrue。もしくはFalseが指定した数だけある行を抽出してみましょう。

「df[(df == True).sum(axis=1) = Trueの数]」、「df[(df == False).sum(axis=1) = Falseの数]」でそれぞれTrueの数、Falseの数を指定した数だけもつ行を取得できます。

また「=」だけでなく「<」(より小さい)、「>」(より大きい)、「<=」(以下)、「>=」(以上)とすることも可能です。

今回はTrueの数が2より大きい行を取得してみます。

df4 = df[(df == True).sum(axis=1) > 2]

df4

Bool値はあまり使わないので、どうやって抽出したらいいか迷いましたが、これでできるようになりました。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次