我經常使用熊貓進行合併(連接),使用範圍條件。以大熊貓的範圍加入/合併的最佳方式
例如,如果有2個dataframes:
甲(A_ID,A_value)
乙(B_ID,B_low,B_high,B_name)
其是大和大約的相同的尺寸(比方說每個2M記錄)。
我想在A和B之間進行內連接,所以A_value將在B_low和B_high之間。
使用SQL語法,這將是:
SELECT *
FROM A,B
WHERE A_value between B_low and B_high
,這將是很容易,短,效率高。
與此同時,在熊貓中,唯一的方法是(不使用我找到的循環),通過在兩個表中創建一個虛擬列,加入它(等同於交叉連接),然後過濾掉不需要的行。這聽起來很沉重和複雜:
A['dummy'] = 1
B['dummy'] = 1
Temp = pd.merge(A,B,on='dummy')
Result = Temp[Temp.A_value.between(Temp.B_low,Temp.B_high)]
另一種解決方案,我必須是通過使用B[(x>=B.B_low) & (x<=B.B_high)]
掩膜應用上的每個值在B中的搜索功能,但它聽起來效率低下以及和可能需要的索引優化。
是否有更優雅和/或有效的方式來執行此操作?
[This Q&A](https://stackoverflow.com/questions/15581829/how-to-perform-an-inner-or-outer-join-of-dataframes-with-pandas-on-non-simplisti)可能是相關的。 –
看起來像他們使用類似的方法,我建議我自己(虛擬列,笛卡爾產品和麪具過濾器)。令人驚訝的是沒有內置的解決方案。 – Dimgold
您是否也看過接受的答案...?不要從Stack Overflow的_questions_中學習。雖然這可能是因爲我沒有意識到答案是一樣的,在這種情況下對不起:) –