เปลี่ยน Pandas Multi-Index เป็นคอลัมน์


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()
TomAugspurger

1
ขอบคุณมากฉันจริง ๆ เรียกดูรอบนี้มาก แต่ "ทำ multiindex ไปยังคอลัมน์" และแบบสอบถามที่คล้ายกันทำให้ฉันได้กระทู้ที่ต้องการ pivot dataframes ของพวกเขาเสมอ ...
TheChymera

3
หาคำตอบได้ง่ายกว่าเสมอเมื่อคุณรู้แล้ว :)
TomAugspurger

คำตอบ:


192

reset_index ()เป็นวิธีการที่หมีแพนด้า DataFrame ที่จะโอนค่าดัชนีลง DataFrame เป็นคอลัมน์ การตั้งค่าเริ่มต้นสำหรับพารามิเตอร์คือdrop = False (ซึ่งจะทำให้ค่าดัชนีเป็นคอลัมน์)

สิ่งที่คุณต้องทำเพิ่ม.reset_index(inplace=True)หลังจากชื่อของ DataFrame:

df.reset_index(inplace=True)  

3
สำหรับกรณีของฉันที่ฉันมีการรีเซ็ตค่าดัชนีแบบแทนที่ระดับ 3 ไม่ทำงาน ทางเลือกกำลังกำหนดดาต้าเฟรมใหม่ที่ตั้งค่าใหม่ให้กับใหม่: df2 = df.reset_index ()
Gorkem

8
หากต้องการรีเซ็ตเฉพาะระดับใดระดับหนึ่งให้ใช้df.reset_index(level=[...])
cs95

20

สิ่งนี้ไม่ได้นำไปใช้กับกรณีของคุณ แต่อาจเป็นประโยชน์สำหรับคนอื่น ๆ (เช่นตัวเอง 5 นาทีก่อน) หาก Multindex มีชื่อเหมือนกัน:

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

df.reset_index(inplace=True) จะล้มเหลวทำให้คอลัมน์ที่สร้างขึ้นไม่สามารถมีชื่อเหมือนกันได้

ดังนั้นคุณต้องเปลี่ยนชื่อ multindex ด้วย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_datelive_date


1
จะให้ค่ารุ่นทดลองของคุณซ้ำได้อย่างไร ฉันมีปัญหาเดียวกันและทำงานได้ยกเว้นค่าของฉันไม่ซ้ำรอย
รวย

4

ตามที่ @ cs95 พูดถึงในความคิดเห็นหากต้องการวางเพียงระดับเดียวให้ใช้:

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

วิธีนี้จะช่วยหลีกเลี่ยงการกำหนดดัชนีที่คุณต้องการหลังจากรีเซ็ต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.