Pandalarda Çoklu Dizin Sıralama


88

Belirli bir sütundaki değerlere göre sıralamak istediğim bir pandas df'de çoklu dizin sütunlarına sahip bir veri kümem var. Sortindex ve sortlevel kullanmayı denedim ama aradığım sonuçları alamadım. Veri kümem şöyle görünüyor:

    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 

Tüm verileri ve dizini Grup 1'de C sütununa göre azalan sırada sıralamak istiyorum, böylece sonuçlarım şöyle görünür:

    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 

Bu sıralamayı verilerimin içinde bulunduğu yapıyla yapmak mümkün mü yoksa Grup1'i dizin tarafına mı değiştirmeliyim?

Yanıtlar:


131

Bir MultiIndex'e göre sıralama yaparken, bir listedeki sütunu açıklayan tuple'ı içermeniz gerekir *:

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

* Pandaları, önce Grup1'e ve sonra C'ye göre sıralamak istediğinizi düşünmeye karıştırmamak için.


Not: Başlangıçta .sortkullanımdan kaldırıldığından beri kullanıldı ve 0.20'de lehine kaldırıldı .sort_values.


Teşekkürler, tam olarak aradığım şey.
MattB

Hmmph. Benden daha hızlı ve daha iyi bir önyükleme çözümü.
DSM

2
Tam olarak ihtiyacım olan şey, teşekkürler. Bu, belgelerden net değildi (en azından ben bulamadım). Ayrıca, sadece üst seviyeye tanımlayan hata mesajı yanıltıcı olduğunu: Cannot sort by duplicate column X.
Dr Jan-Philip Gehrcke

Neden bir liste kullanmamız gerektiğine dair açıklama eklediğiniz için ekstra minnettarım. Pandaların listeyi ve demeti algılamasını ve bir demeti sütun listesi olarak değil de sütun seçimi olarak yorumlamasını isterdim ...
Kaushik Ghose

6
Kulağa hoş gelen @KaushikGhose, iyi bir özellik isteği olabilir , sanırım loc'u kullanabilirsiniz:df.loc[('Group1', 'C')]
Andy Hayden 13
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.