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 サイトの他の関連記事を参照してください。