データ分析シナリオでは、複数のフィルターを適用して結果を絞り込むことが重要になることがよくあります。この記事の目的は、Pandas データ オブジェクトで複数の比較演算を連鎖させる効率的なアプローチを取り上げることです。
目標は、関係演算子の辞書を処理し、それらを特定の Pandas に追加的に適用することです。シリーズまたはデータフレーム。フィルタリングされたデータセットになります。この操作では、特に大規模なデータセットを扱う場合、不必要なデータのコピーを最小限に抑える必要があります。
Pandas は、ブール インデックスを使用してデータをフィルタリングするための非常に効率的なメカニズムを提供します。ブール型インデックス作成には、論理条件の作成と、これらの条件を使用したデータのインデックス作成が含まれます。次の例を考えてみましょう:
df.loc[df['col1'] >= 1, 'col1']
このコード行は、DataFrame df 内のすべての行を選択します。 'col1' 列の値は 1 以上です。結果は、フィルター処理された値を含む新しい Series オブジェクトです。
複数のフィルターを適用するには、& のような論理演算子を使用してブール条件を組み合わせることができます。 (と) と | (または)。例:
df[(df['col1'] >= 1) & (df['col1'] <= 1)]
この操作では行がフィルターされます。 'col1' は 1 以上かつ 1 以下の両方です。
複数のフィルターを適用するプロセスを簡素化するために、ヘルパー関数を作成できます。
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 に適用します。
これらの関数を使用するには、フィルター条件の辞書を提供できます:
filters = {'>=': [1], 'b1 = b(df, 'col1', ge, 1)
b2 = b(df, 'col1', le, 1)
filtered_df = f(df, b1, b2)
このコードは、DataFrame df の 'col1' 列にフィルターを適用し、フィルター処理された結果を含む新しい DataFrame を返します。
拡張機能
Pandas 0.13 では、文字列式を使用してフィルタを適用する便利な方法を提供するクエリ メソッドが導入されました。有効な列識別子の場合、次のコードが可能になります:
df.query('col1 この行は、私たちのものと同じフィルタリングを実現します。より簡潔な構文を使用した前の例。
ブール型インデックスとヘルパー関数を利用することで、複数のフィルターを Pandas データフレームとシリーズに効率的に適用できます。このアプローチにより、特に大規模なデータセットを操作する場合に、データのコピーが最小限に抑えられ、パフォーマンスが向上します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3