कॉलम नामों से पांडा डेटाफ्रेम में शामिल होना


91

मेरे पास निम्नलिखित कॉलम नामों के साथ दो डेटाफ्रेम हैं:

frame_1:
event_id, date, time, county_ID

frame_2:
countyid, state

मैं निम्नलिखित कॉलम के साथ एक डेटाफ्रेम प्राप्त करना चाहूंगा जिसमें (बाएं) शामिल हों county_ID = countyid:

joined_dataframe
event_id, date, time, county, state

मैं यह पता नहीं लगा सकता कि अगर मैं जिस कॉलम पर जुड़ना चाहता हूं, वह सूचकांक कैसे नहीं है। सबसे आसान तरीका क्या है? धन्यवाद!

जवाबों:


164

आप बाएँ और दाएँ_ विकल्प का उपयोग इस प्रकार कर सकते हैं:

pd.merge(frame_1, frame_2, left_on='county_ID', right_on='countyid')

मुझे इस सवाल पर यकीन नहीं था कि क्या आप केवल विलय करना चाहते हैं यदि कुंजी बाएं हाथ की डेटाफ़्रेम में थी। अगर ऐसा है तो निम्नलिखित ऐसा करेगा (उपरोक्त प्रभाव कई से कई मर्जों को करेगा)

pd.merge(frame_1, frame_2, how='left', left_on='county_ID', right_on='countyid')

1
इस पर थोड़ा विस्तार करने के लिए, यदि आप एक तरफ एक सूचकांक निर्दिष्ट करना चाहते हैं, तो आप उपयोग कर सकते हैं right_index=True
ड्रैकल्स

1
@Woody क्या होगा यदि frame_1पहले से county_IDही सूचकांक के रूप में है, और frame_2पहले से countyidही सूचकांक के रूप में है? मैं समझता हूँ कि मैं स्थानापन्न कर सकते हैं frame_1.reset_index()के लिए frame_1(और के लिए एक ही frame_2) अपने जवाब में। लेकिन क्या सूचकांक को रीसेट किए बिना शामिल होने / विलय करने का एक अधिक कुशल तरीका है?
झांग 18

3

आपको county_IDसही फ्रेम के लिए इंडेक्स बनाने की आवश्यकता है :

frame_2.join ( frame_1.set_index( [ 'county_ID' ], verify_integrity=True ),
               on=[ 'countyid' ], how='left' )

आपकी जानकारी के लिए, पंडों में लेफ्ट जॉइन ब्रेक तब होता है, जब राइटिंग फ्रेम में जॉइनिंग कॉलम पर गैर अद्वितीय मूल्य होते हैं। इस बग को देखें ।

इसलिए आपको इसमें शामिल होने से पहले सत्यनिष्ठा को सत्यापित करना होगा , verify_integrity=True

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.