Как отсортировать многоуровневый индекс по значениям столбцов - PullRequest
1 голос
/ 20 мая 2019

Я пытаюсь отсортировать данные в многоуровневом индексе для визуализации.На данный момент это просто упорядочить данные на основе значений

Я пытался работать с sort_index и sort_values, однако ни один из них не сработал.Я предполагаю, что есть способ объединить 2, который мне не понятен.

Пример кода

import pandas as pd

data = {'lev1':[1,1,2,2], 
        'lev2':['item1', 'item2', 'item3', 'item2'], 
        'col1':[.55, .44, .22, .34],
        'col2':[.54, .86, .55, .44]}

df = pd.DataFrame(data=data)
df.set_index(['lev1', 'lev2'], inplace=True)

Это должно привести к:

                col1    col2
    lev1 lev2       
    1   item1   0.55    0.54
        item2   0.44    0.86
    2   item3   0.22    0.55
        item2   0.34    0.44

То, что я хотел бы видеть, является упорядоченным выводом, основанным на значениях в col2.Тем не менее, при сохранении многоуровневого индекса нетронутым.

Значение, результаты должны показать:

                col1    col2
    lev1 lev2       
    1   item2   0.44    0.86
        item1   0.55    0.54
    2   item3   0.22    0.55
        item2   0.34    0.44

Любые идеи или предложения приветствуются.

Спасибо!

1 Ответ

4 голосов
/ 20 мая 2019

Для панд 0,23 + возможна сортировка по индексу и по столбцам по DataFrame.sort_values:

df = df.sort_values(['lev1','col2'], ascending=[True, False])
print (df)
            col1  col2
lev1 lev2             
1    item2  0.44  0.86
     item1  0.55  0.54
2    item3  0.22  0.55
     item2  0.34  0.44

Для более низких версий панд необходимо DataFrame.reset_index, сортировка и затем DataFrame.set_index:

df = (df.reset_index()
        .sort_values(['lev1','col2'], ascending=[True, False])
        .set_index(['lev1','lev2']))
...