Pandas 中以範圍連接
在使用Pandas 進行資料操作時,一個常見任務是根據範圍條件合併兩個資料幀。這涉及到識別資料幀 A 中的行,其中特定列中的值位於資料幀 B 中的指定範圍內。
此任務的一種方法是在兩個資料幀中建立虛擬列,使用以下命令執行交叉連接這個虛擬列,然後過濾掉不符合範圍條件的行。然而,這種方法對於大型資料集可能效率低。
另一個解決方案是利用 numpy 廣播,這是對陣列執行逐元素操作的強大技術。透過將資料幀 A 和 B 中的相關列轉換為 numpy 數組,我們可以應用邏輯運算子將 A_value 與 B_low 和 B_high 值進行比較,以識別滿足範圍條件的行。
import numpy as np # Convert to numpy arrays a = A.A_value.values bh = B.B_high.values bl = B.B_low.values # Find intersecting indices i, j = np.where((a[:, None] >= bl) & (a[:, None] <= bh)) # Merge and align dataframes result = pd.concat([ A.loc[i, :].reset_index(drop=True), B.loc[j, :].reset_index(drop=True) ], axis=1) print(result)
此方法提供與虛擬列方法相比,大型資料集的效率更高。此外,它還可以透過調整 numpy 廣播步驟中的邏輯來輕鬆實現左連接或右連接。
以上是如何根據範圍條件高效合併 Pandas DataFrame?的詳細內容。更多資訊請關注PHP中文網其他相關文章!