ホームページ > バックエンド開発 > Python チュートリアル > ブールインデックスを使用してパンダデータオブジェクトを効率的にフィルタリングする方法?

ブールインデックスを使用してパンダデータオブジェクトを効率的にフィルタリングする方法?

Barbara Streisand
リリース: 2024-10-20 11:57:30
オリジナル
665 人が閲覧しました

How to Efficiently Filter Pandas Data Objects Using Boolean Indexing?

ブール インデックスを使用した Pandas データフレームとシリーズの効率的なフィルタリング

データ分析シナリオでは、複数のフィルターを適用して結果を絞り込むことが重要になることがよくあります。この記事の目的は、Pandas データ オブジェクトで複数の比較演算を連鎖させる効率的なアプローチを取り上げることです。

課題

目標は、関係演算子の辞書を処理し、それらを特定の Pandas に追加的に適用することです。シリーズまたはデータフレーム。フィルタリングされたデータセットになります。この操作では、特に大規模なデータセットを扱う場合、不必要なデータのコピーを最小限に抑える必要があります。

解決策: ブール インデックス

Pandas は、ブール インデックスを使用してデータをフィルタリングするための非常に効率的なメカニズムを提供します。ブール型インデックス作成には、論理条件の作成と、これらの条件を使用したデータのインデックス作成が含まれます。次の例を考えてみましょう:

<code class="python">df.loc[df['col1'] >= 1, 'col1']</code>
ログイン後にコピー

このコード行は、'col1' 列の値が 1 以上である DataFrame df 内のすべての行を選択します。結果は、次の内容を含む新しい Series オブジェクトです。フィルタリングされた値。

複数のフィルタを適用するには、& のような論理演算子を使用してブール条件を組み合わせることができます。 (と) と | (または)。例:

<code class="python">df[(df['col1'] >= 1) & (df['col1'] <= 1)]
ログイン後にコピー

この操作は、'col1' が 1 以上と 1 以下の両方である行をフィルターします。

ヘルパー関数

複数のフィルターを適用するプロセスを簡素化するために、ヘルパー関数を作成できます。

<code class="python">def b(x, col, op, n): 
    return op(x[col], n)

def f(x, *b):
    return x[(np.logical_and(*b))]
ログイン後にコピー

b 関数は、指定された列と演算子に対してブール条件を作成し、f は複数のブール条件を DataFrame または Series に適用します。

使用例

これらの関数を使用するには、フィルター条件の辞書を提供します。

<code class="python">filters = {'>=': [1], '<=': [1]}</code>
ログイン後にコピー
<code class="python">b1 = b(df, 'col1', ge, 1)
b2 = b(df, 'col1', le, 1)
filtered_df = f(df, b1, b2)</code>
ログイン後にコピー

このコードはフィルターを 'col1' に適用します。

機能強化

Pandas 0.13 では、文字列式を使用してフィルタを適用する便利な方法を提供するクエリ メソッドが導入されました。有効な列識別子の場合、次のコードが可能になります:

<code class="python">df.query('col1 <= 1 & 1 <= col1')</code>
ログイン後にコピー

この行は、より簡潔な構文を使用して、前の例と同じフィルタリングを実現します。

ブール型インデックスとヘルパー関数を利用することで、複数のフィルターを Pandas データフレームとシリーズに効率的に適用できます。このアプローチにより、特に大規模なデータセットを操作する場合に、データのコピーが最小限に抑えられ、パフォーマンスが向上します。

以上がブールインデックスを使用してパンダデータオブジェクトを効率的にフィルタリングする方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート