Pandas で範囲ベースの結合を効率的に実行するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-02 00:19:02
オリジナル
735 人が閲覧しました

How to Efficiently Perform Range-Based Joins in Pandas?

Pandas での範囲ベースの結合の最適化

データフレームを操作する場合、多くの場合、範囲条件に基づいて結合を実行する必要があります。 Pandas の一般的なアプローチは、ダミー列を作成し、それに結合して、不要な行をフィルターで除外することです。ただし、このソリューションは、特に大規模なデータセットの場合、計算コストが高くなる可能性があります。

幸いなことに、Pandas には範囲ベースの結合を実現する、より効率的で洗練された方法があります。

numpy ブロードキャストの使用

最も簡単な方法は、numpy ブロードキャストを利用することです。これには、Pandas データフレームを numpy 配列に変換し、ブール演算を使用して一致する行を識別することが含まれます。

<code class="python">import numpy as np

a = A.A_value.values
bh = B.B_high.values
bl = B.B_low.values

i, j = np.where((a[:, None] >= bl) & (a[:, None] <= bh))

pd.concat([
    A.loc[i, :].reset_index(drop=True),
    B.loc[j, :].reset_index(drop=True)
], axis=1)</code>
ログイン後にコピー

このアプローチは、コストのかかる行の反復を回避できるため、非常に効率的です。

左への拡張結合

このソリューションを左結合に拡張するには、データフレーム B のどの行にも一致しないデータフレーム A の残りの行を追加できます。

<code class="python">pd.concat([
    A.loc[i, :].reset_index(drop=True),
    B.loc[j, :].reset_index(drop=True)
], axis=1).append(
    A[~np.in1d(np.arange(len(A)), np.unique(i))],
    ignore_index=True, sort=False
)</code>
ログイン後にコピー

これにより、すべての行が一致することが保証されます。データフレーム A の行は、データフレーム B に一致する行がない場合でも結果に含まれます。

以上がPandas で範囲ベースの結合を効率的に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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