Поиск по Pandas кадру данных с иерархической индексацией по одному столбцу - PullRequest
2 голосов
/ 07 марта 2020

Я работаю с этим фреймом данных:

import pandas as pd
df = pd.DataFrame([['A', 'one',  105], ['A', 'two',  101], ['A', 'three',  103],
                      ['B','one',  101], ['B','two',  1102], ['B','three',  1050]],
                   columns=['c1', 'c2', 'c3'])
df = df.set_index(['c1', 'c2'])
df

, который возвращает

               c3
c1    c2    
A     one     105
      two     101
      three   103
B     one     101
      two     1102
      three   1050

... и я хотел бы отсортировать по столбцу c3, сохраняя строки и сортировку c1 , чтобы получить это:

              c3
c1    c2    
A     one     105
      three   103
      two     101
B     two     1102
      three   1050
      one     101

Я не смог придумать метод, который не перемешивает сортировку c1. В частности, окончательный df.sort_index() возвращает KeyError: 'c1'

Ответы [ 2 ]

5 голосов
/ 07 марта 2020

IIU C Вы можете сделать:

out = (df.sort_values(['c3','c1'],ascending=False)
      .reindex(df.index.get_level_values(0).unique(),level=0))

            c3
c1 c2         
A  one     105
   three   103
   two     101
B  two    1102
   three  1050
   one     101
2 голосов
/ 07 марта 2020

Полагаю, вы можете просто использовать:

df.sort_values(['c1','c3'], ascending=False).groupby(['c1','c3']).agg(lambda x: x)

Вывод:

            c3
c1 c2         
B  two    1102
   three  1050
   one     101
A  one     105
   three   103
   two     101
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...