मैं अक्सर श्रेणी सीमा का उपयोग करके विलय (शामिल) के लिए पांडा का उपयोग कर रहा हूं।पांडा में रेंज द्वारा जुड़ने/विलय करने का सबसे अच्छा तरीका
उदाहरण के लिए अगर वहाँ 2 dataframes हैं:
एक (A_id, A_value)
बी (B_id, B_low, B_high, B_name)
जो बड़ा और के लगभग हैं एक ही आकार (मान लें कि 2 एम रिकॉर्ड प्रत्येक)।
मैं, ए और बी के बीच एक आंतरिक में शामिल होने बनाने के लिए करना इतना 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)]
मुखौटा का उपयोग करके एक मूल्य बी पर एक खोज समारोह में से प्रत्येक पर लगाने से है, लेकिन यह रूप में अच्छी तरह अक्षम लगता है और सूचकांक अनुकूलन की आवश्यकता हो सकती।
क्या इस कार्रवाई को करने के लिए एक और अधिक सुरुचिपूर्ण और/या कुशल तरीका है?
[यह क्यू एंड ए] (https://stackoverflow.com/questions/15581829/how-to-perform-an-inner-or-outer-join-of-dataframes-with-pandas-on-non-simplisti) प्रासंगिक हो सकता है। –
ऐसा लगता है कि मैंने स्वयं को सुझाए गए एक समान विधि का उपयोग किया है (डमी कॉलम, कार्टेशियन उत्पाद और मास्क फ़िल्टर)। यह आश्चर्य की बात है कि कोई अंतर्निहित समाधान नहीं है। – Dimgold
क्या आपने स्वीकृत उत्तर भी देखा ...? स्टैक ओवरफ़्लो पर _questions_ से कभी भी नहीं सीखें। यद्यपि यह हो सकता है कि मैं यह महसूस नहीं कर रहा हूं कि उत्तर वही काम करता है, जिस स्थिति में खेद है :) –