Multi Index Sorting ใน Pandas


88

ฉันมีชุดข้อมูลที่มีคอลัมน์หลายดัชนีในแพนด้า df ที่ฉันต้องการจัดเรียงตามค่าในคอลัมน์เฉพาะ ฉันได้ลองใช้ sortindex และ sortlevel แล้ว แต่ไม่สามารถรับผลลัพธ์ที่ฉันต้องการได้ ชุดข้อมูลของฉันดูเหมือนว่า:

    Group1    Group2
    A B C     A B C
1   1 0 3     2 5 7
2   5 6 9     1 0 0
3   7 0 2     0 3 5 

ฉันต้องการจัดเรียงข้อมูลทั้งหมดและดัชนีตามคอลัมน์ C ในกลุ่ม 1 ในลำดับจากมากไปหาน้อยเพื่อให้ผลลัพธ์ของฉันมีลักษณะดังนี้:

    Group1    Group2
    A B C     A B C
 2  5 6 9     1 0 0
 1  1 0 3     2 5 7
 3  7 0 2     0 3 5 

เป็นไปได้ไหมที่จะจัดเรียงแบบนี้โดยใช้โครงสร้างที่ข้อมูลของฉันอยู่หรือฉันควรจะสลับ Group1 ไปที่ด้านดัชนี

คำตอบ:


131

เมื่อจัดเรียงตาม MultiIndex คุณจะต้องมีทูเพิลที่อธิบายคอลัมน์ภายในรายการ *:

In [11]: df.sort_values([('Group1', 'C')], ascending=False)
Out[11]: 
  Group1       Group2      
       A  B  C      A  B  C
2      5  6  9      1  0  0
1      1  0  3      2  5  7
3      7  0  2      0  3  5

* เพื่อไม่ให้แพนด้าสับสนคิดว่าคุณต้องการเรียงลำดับก่อนโดย Group1 แล้วตามด้วย C


หมายเหตุ: เดิมใช้.sortตั้งแต่เลิกใช้งานแล้วลบออกใน 0.20 .sort_valuesตาม


ขอบคุณสิ่งที่ฉันกำลังมองหา
MattB

อืม เร็วกว่าฉันและเป็นทางออกที่ดีกว่าในการบูต
DSM

2
สิ่งที่ฉันต้องการขอบคุณ ไม่ชัดเจนจากเอกสาร (อย่างน้อยฉันก็ไม่พบ) Cannot sort by duplicate column Xนอกจากนี้ยังเกิดข้อผิดพลาดเมื่อมีเพียงการกำหนดระดับบนสุดคือความเข้าใจผิด:
ดร. ฟิลิป ม.ค. Gehrcke

ขอขอบคุณเป็นพิเศษสำหรับการเพิ่มคำอธิบายว่าเหตุใดเราจึงต้องใช้รายการ ฉันหวังว่า Pandas จะตรวจพบรายการเทียบกับทูเปิลและตีความทูเปิลเป็นคอลัมน์ที่เลือกไม่ใช่รายการคอลัมน์ ...
Kaushik Ghose

6
@Kaushik ผู้ที่ดูเหมือนว่าอาจเป็นคำขอคุณสมบัติที่ดีฉันเดาว่าคุณสามารถใช้ loc:df.loc[('Group1', 'C')]
Andy Hayden
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.