Pandas で範囲ごとに結合 / マージする最良の方法
データ分析では、以下に基づいてデータフレームを結合またはマージする必要があるのが一般的です。特定の範囲条件。 1 つのアプローチはダミー列を使用したクロス結合を使用することですが、これは非効率的で複雑になる可能性があります。よりエレガントで効率的な解決策は、numpy ブロードキャストを利用することです。
numpy ブロードキャスト
numpy ブロードキャストを使用すると、異なる形状の配列間で要素ごとの操作を実行できます。これを利用して、データフレーム内のどの値が指定された範囲条件を満たすかを判断できます。
Setup
2 つのデータフレームを考えます。A には列 A_id と A_value が、B には列が含まれます。列 B_id、B_low、および B_high。 A_value が B_low と B_high の間にあるように、A と B を結合したいと考えています。
実装
<code class="python">import numpy as np # Convert dataframes to arrays a = A.A_value.values bh = B.B_high.values bl = B.B_low.values # Determine matching rows and columns i, j = np.where((a[:, None] >= bl) & (a[:, None] <= bh)) # Join corresponding rows from A and B joined = pd.concat([ A.loc[i, :].reset_index(drop=True), B.loc[j, :].reset_index(drop=True) ], axis=1) # Print joined dataframe print(joined)</code>
このメソッドは、要素ごとの比較とブロードキャストを利用して効率的に識別します。範囲条件を満たす A と B の行を結合します。これはエレガントかつ効率的であり、ループやダミー列の必要性を回避します。
以上がPandas で範囲条件に基づいて DataFrame を効率的に結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。