最佳化 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>
這種方法非常有效,因為它避免了昂貴的行迭代。
向左擴展連接
要將此解決方案擴展到左連接,我們可以附加資料幀A 中與資料幀B 中的任何行都不匹配的剩餘行。
<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中文網其他相關文章!