Ryota Kondo

Ryota Kondo

2024/01/21

DataFrame全体で条件に合う値があるか判定するシンプルな実装

DataFrame全体で条件に合う値があるか、まとめて判定するシンプルな実装について説明します。

例えば、DataFrame全体で1つでも欠損値があるかどうか、全体の値がすべて100以上かどうかなどを判定する場合に使える実装になっています。

実装方法

実装は下のような形です。

# DataFrame全体で1つでも条件に該当する値があればTrue、そうでなければFalse
if bool(df.<全体を判定する関数>.any().any()):
    print("True")
else:
    print("False")

# DataFrame全体ですべての値が条件に該当すればTrue、そうでなければFalse
if bool(df.<全体を判定する関数>.all().all()):
    print("True")
else:
    print("False")

<全体を判定する関数>にはDataFrame.eq()DataFrame.isnull()などDataFrame全体に対してTrue/False判定をする関数を使い、そのあとany().any()、もしくはall().all()と続けます。

「全体で1つでも条件に該当する値があればTrue」と判定したい場合はany().any()を使用し、「全体ですべての値が条件に該当すればTrue」と判定したい場合はall().all()を使います。

最後にbool()を使っているのは、any().any()all().all()の返値の型がnumpy.bool_となっているため、Pythonで通常使うbool型に変換しています。

具体例は下の通りです。

# DataFrame全体で1つでも欠損値があればTrue、そうでなければFalse
if bool(df.isnull().any().any()):
    print("True")
else:
    print("False")

# DataFrame全体ですべての値が100以上であればTrue、そうでなければFalse
if bool(df.ge(100).all().all()):
    print("True")
else:
    print("False")

全体を判定する関数

下のDataFrameの関数などが<全体を判定する関数>として使用できます。

  • 指定の値と等しい
    • DataFrame.eq(<指定の値>)
  • 指定の値と不一致
    • DataFrame.ne(<指定の値>)
  • 指定の値以下
    • DataFrame.le(<指定の値>)
  • 指定の値より下
    • DataFrame.lt(<指定の値>)
  • 指定の値以上
    • DataFrame.ge(<指定の値>)
  • 指定の値より上
    • DataFrame.gt(<指定の値>)
  • 欠損値である
    • DataFrame.isnull()もしくはDataFrame.isna()
  • 欠損値ではない
    • DataFrame.notnull()もしくはDataFrame.notna()

応用

少し複雑になりますが、下のような判定もすることが可能です。

  • 1行の中でいづれかの値が条件に該当し、それが全行に当てはまる場合Trueと判定する。
  • 1行の中で全ての値が条件に該当し、それがいづれかの行に当てはまる場合Trueと判定する。
# 1行の中でいづれかの値が条件に該当し、それが全行に当てはまる場合True。
# そうでなければFalse
if bool(df.<全体を判定する関数>.any(axis='columns').all()):
    print("True")
else:
    print("False")

# 1行の中で全ての値が条件に該当し、それがいづれかの行に当てはまる場合True。
# そうでなければFalse
if bool(df.<全体を判定する関数>.all(axis='columns').any()):
    print("True")
else:
    print("False")

参考

この記事は以下の情報を参考にしました。

関連タグの記事

Ryota Kondo
Ryota Kondo

システムエンジニア・プログラマー|このブログサイトの運営もしており、思いついたことをまとめて記事を書いています💡