पंडों मल्टी-इंडेक्स को कॉलम में बदलें


155

मेरे पास 2 इंडेक्स स्तरों वाला डेटाफ्रेम है:

                         value
Trial    measurement
    1              0        13
                   1         3
                   2         4
    2              0       NaN
                   1        12
    3              0        34 

जिसे मैं इस में बदलना चाहता हूं:

Trial    measurement       value

    1              0        13
    1              1         3
    1              2         4
    2              0       NaN
    2              1        12
    3              0        34 

मैं यह कैसे कर सकता हूं?

मुझे इसकी आवश्यकता है क्योंकि मैं यहां दिए गए निर्देशों के अनुसार डेटा को एकत्र करना चाहता हूं , लेकिन मैं अपने स्तंभों का चयन उस तरह से नहीं कर सकता जैसे कि वे सूचकांकों के रूप में उपयोग करते हैं।


2
डुप्लिकेट: stackoverflow.com/questions/18624039/… आप पहला सुझाव चाहते हैं। .reset_index()
टॉमगुग्सगर

1
बहुत धन्यवाद, मैंने वास्तव में इसके लिए बहुत कुछ ढूंढा है, लेकिन "कॉलम के लिए मल्टीइन्डेक्स बनाएं" और इसी तरह के प्रश्नों से मुझे हमेशा ऐसे सूत्र मिलते हैं जो अपने
डेटाफ्रेम

3
जब आप पहले से ही इसे जानते हैं तो जवाब खोजना हमेशा आसान होता है :)
टॉमअग्सपरगर

जवाबों:


192

Reset_index () एक पांडा DataFrame विधि है कि स्तंभों के रूप में DataFrame में सूचक मान हस्तांतरण होगा। पैरामीटर के लिए डिफ़ॉल्ट सेटिंग ड्रॉप है = गलत (जो कॉलम के रूप में सूचकांक मूल्यों को बनाए रखेगा)।

आपको .reset_index(inplace=True)केवल DataFrame के नाम के बाद जोड़ना होगा:

df.reset_index(inplace=True)  

3
मेरे मामले में जहां मेरे पास 3 इंडेक्स स्तर थे, वहां रीसेट रीसेट नहीं हुआ। वैकल्पिक नए रीसेट किए गए डेटाफ़्रेम को एक नए पर असाइन कर रहा है: df2 = df.reset_index ()
Gorkem

8
केवल एक विशेष स्तर (s), उपयोग रीसेट करने के लिएdf.reset_index(level=[...])
cs95

20

यह वास्तव में आपके मामले पर लागू नहीं होता है, लेकिन दूसरों के लिए उपयोगी हो सकता है (जैसे कि 5 मिनट पहले)। यदि किसी के मल्टींडेक्स का नाम समान है:

                         value
Trial        Trial
    1              0        13
                   1         3
                   2         4
    2              0       NaN
                   1        12
    3              0        34 

df.reset_index(inplace=True) विफल हो जाएगा, जो स्तंभ बनाए गए हैं, उनके समान नाम नहीं हो सकते हैं।

तो फिर आपको df.index = df.index.set_names(['Trial', 'measurement'])प्राप्त करने के लिए मल्टीनेक्स का नाम बदलने की आवश्यकता है :

                           value
Trial    measurement       

    1              0        13
    1              1         3
    1              2         4
    2              0       NaN
    2              1        12
    3              0        34 

और फिर df.reset_index(inplace=True)एक आकर्षण की तरह काम करेगा।

मुझे इस समस्या का सामना वर्ष और महीने के बाद एक डेटाइम-कॉलम (इंडेक्स नहीं) पर समूहबद्ध करने के बाद हुआ live_date, जिसका अर्थ था कि वर्ष और महीने दोनों का नाम रखा गया था live_date


1
खुद को दोहराने के लिए आपके परीक्षण के मूल्य कैसे हैं? मुझे भी यही समस्या थी और यह काम करता है सिवाय मेरे मूल्यों के खुद को दोहराए नहीं।
रिच

4

जैसा कि @ cs95 ने एक टिप्पणी में उल्लेख किया है, केवल एक स्तर को गिराने के लिए, उपयोग करें:

df.reset_index(level=[...])

यह रीसेट के बाद अपने इच्छित सूचकांक को फिर से परिभाषित करने से बचता है।

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