Saturday, 15 September 2012

python - Merge 2 numpy arrays and replace existing values by field -


मैं 2 numpy arrays को मर्ज करना चाहता हूं। पहले आयाम (फ़ील्ड entid ) में मौजूद तत्वों को बदल दिया जाएगा, जबकि गैर मौजूदा तत्व जोड़ दिया जाएगा।

जैसा कि INSERT या प्रतिस्थापित करें में एक UNIQUE INDEX कॉलम entid पर

I यह उदाहरण कोड मिला:

  # - * - कोडिंग: utf8 - * - आयात करें numpy डेटा = [(100, 2.), (200, 3.)] dt = numpy.dtype ( [("एंटिड", एमएमपी.यूआईटी 32), ("डेटा", एमएमपी.फ्लोएट 32)) डेटा_आरआर = एमएमपीएआरए (डेटा, डीटीईपी = डीटी) डेटा_ बी = [(1000, 5), (100, 10)। ] Data_arr_b = numpy.array (data_b, dtype = dt) प्रिंट डेटा_arr प्रिंट डेटा_arr_b प्रिंट डेटा_arr.dtype data_new = numpy.concatenate ((data_arr, data_arr_b)) प्रिंट डेटा_न्यू  

निम्न आउटपुट के साथ [(100 एल, 2.0) (200 एल, 3.0)] [(1000 एल, 5.0) (100 एल, 10.0)] [('एंटिड', '& lt; u4'), ('डेटा अपेक्षित आउटपुट होगा: < [(100 एल, 10.0) (200 एल, 3.0) (1000 एल, 5.0)

entid = 100 वाला तत्व होना चाहिए डेटा = 10.0 और <के साथ एक नया तत्व < कोड> एंटिड = 1000 और डेटा = 5.0 जोड़ा जाना चाहिए था।

मैंने इंटरनेट और इस साइट की खोज की लेकिन समाधान नहीं मिला।

यद्यपि यह numpy में करना संभव है, यह अजीब होगा आपको वास्तव में pandas का उपयोग करना चाहिए, जिसे इस तरह से करने के लिए डिज़ाइन किया गया है।

  & gt; & gt; & gt; पीडी के रूप में आयात पंडों & gt; & gt; & gt; & Gt; & gt; & gt; Data_a = [(100, 2.), (200, 3.)]> gt; & gt; & gt; Data_b = [(1000, 5), (100, 10.)]> gt; & gt; & gt; & Gt; & gt; & gt; Df_a = pd.DataFrame (डेटा_ए, कॉलम = ['एंटिड', 'डेटा']) & gt; & gt; & gt; Df_b = pd.DataFrame (डेटा_ बी, कॉलम = ['एंटिड', 'डेटा']) & gt; & gt; & gt; & Gt; & gt; & gt; Df_ai = df_a.set_index ('एंटिड')>> gt; & gt; & gt; Df_bi = df_b.set_index ('एंटिड')> & gt; & gt; & gt; & Gt; & gt; & gt; Df_final = df_bi.combine_first (df_ai) & gt; & gt; & gt; प्रिंट (df_final) डेटा 100 10 200 3 1000 5  

या डेटा के शुरुआती प्रारूप पर अधिक नियंत्रण रखते हैं:

  & gt; & gt; & gt; पीडी के रूप में आयात पंडों & gt; & gt; & gt; & Gt; & gt; & gt; Data_a = [2., 3.] & gt; & gt; & gt; Data_b = [5., 10.] & gt; & gt; & gt; & Gt; & gt; & gt; Ind_a = [100, 200] & gt; & gt; & gt; Ind_b = [1000, 100]> gt; & gt; & gt; & Gt; & gt; & gt; Ser_a = pd.Series (डेटा_ए, इंडेक्स = इंड_आ) & gt; & gt; & gt; Ser_b = pd.Series (डेटा_ बी, इंडेक्स = इंड_बी) & gt; & gt; & gt; & Gt; & gt; & gt; Ser_final = ser_b.combine_first (ser_a) & gt; & gt; & gt; & Gt; & gt; & gt; प्रिंट (ser_final) 100 10 200 3 1000 5  

No comments:

Post a Comment