2016-03-16 1 views
2

Я пытаюсь сортировать Python Pandas MultiIndex по максимальному значению определенного столбца, в данном случае INFORMATION_SURPLUS_PCT.Python: Сортировка Pandas MultiIndex по максимальному значению указанного colum

Как я могу сортировать уровни, поддерживая группировку и порядок строк?

Я пробовал: df.sort(['INFORMATION_SURPLUS_PCT'], ascending=False), но это теряет группировку строк. Любая помощь высоко ценится!

Текущий мультииндексных вход:

   INFORMATION_SURPLUS_DIFF INFORMATION_SURPLUS_PCT 
    SYMBOL               
    AAL 0     0.000000     0.000000 
      1     -0.008466     1.000000 
      2     -0.011333     0.000000 
    ADI 0     0.000000     0.000000 
      1     -0.010781     2.000000 
      2     -0.010414     0.000000 

Желаемый результат:

   INFORMATION_SURPLUS_DIFF INFORMATION_SURPLUS_PCT 
    SYMBOL 
    ADI 0     0.000000     0.000000 
      1     -0.010781     2.000000 
      2     -0.010414     0.000000 
    AAL 0     0.000000     0.000000 
      1     -0.008466     1.000000 
      2     -0.011333     0.000000 

ответ

1

Вы можете groupby на первом уровне, найти max, sort_values и получить index. Последнее вы можете reindexDataFrame на первом уровне - level=0:

print df 
      INFORMATION_SURPLUS_DIFF INFORMATION_SURPLUS_PCT 
SYMBOL              
AAL 0     0.000000      0.0 
     1     -0.008466      1.0 
     2     -0.011333      0.0 
ADI 0     0.000000      0.0 
     1     -0.010781      2.0 
     2     -0.010414      0.0 

print df.groupby(level=0)['INFORMATION_SURPLUS_PCT'].max().sort_values(ascending=False) 
SYMBOL 
ADI 2.0 
AAL 1.0 
Name: INFORMATION_SURPLUS_PCT, dtype: float64 

idx = df.groupby(level=0)['INFORMATION_SURPLUS_PCT'].max().sort_values(ascending=False).index 
print idx 
Index([u'ADI', u'AAL'], dtype='object', name=u'SYMBOL') 

print df.reindex(index=idx, level=0) 
      INFORMATION_SURPLUS_DIFF INFORMATION_SURPLUS_PCT 
SYMBOL              
ADI 0     0.000000      0.0 
     1     -0.010781      2.0 
     2     -0.010414      0.0 
AAL 0     0.000000      0.0 
     1     -0.008466      1.0 
     2     -0.011333      0.0 
+0

Еще раз спасибо @jezrael, что работает! – jfive

 Смежные вопросы

  • Нет связанных вопросов^_^