Сортировка значений для каждого уровня 1 в многоиндексных пандах - PullRequest
0 голосов
/ 03 июля 2019

У меня есть фрейм данных с мультииндексом, первый уровень - это company_ID, а второй уровень - это временная метка.Как я могу получить звание всех компаний в зависимости от их оценок, каждый месяц?

                        Score
company_idx timestamp            
10006       2010-01-31  69.875394
            2010-11-30  73.640693
            2010-12-31  73.286248
            2011-01-31  73.660052
            2011-02-28  74.615564
            2011-03-31  73.535187
            2011-04-30  72.491390
            2012-01-31  72.162768
            2012-02-29  61.637952
            2012-03-31  59.445419
            2012-04-30  25.685615
            2012-05-31   8.047693
            2012-06-30  58.341200
                          ...
9981        2016-12-31  51.011261
            2018-05-31  54.462832
            2018-06-30  57.126250
            2018-07-31  54.695835
            2018-08-31  63.758145
            2018-09-30  63.255583
            2018-10-31  62.069697
            2018-11-30  62.795650
            2018-12-31  63.045329
            2019-01-31  60.276990
            2019-02-28  56.666379
            2019-03-31  57.903213
            2019-04-30  57.558973
            2019-05-31  52.260287

Я пытался сделать:

df2 = df.sort_index(by='Score', ascending=False)

Но это не дает мне то, что я хочу,Вы могли бы помочь?Я довольно новичок с многоуровневыми фреймами данных.Большое спасибо!

1 Ответ

2 голосов
/ 03 июля 2019

Вы должны поменять местами уровни индекса, чтобы сначала иметь месяц, а затем отсортировать по возрастанию отметки времени и убыванию показателя:

df.index = df.index.swaplevel()
df.sort_values(['timestamp', 'Score'], ascending=[True, False], inplace=True)

Это не дает интересного результата с вашим значением выборки, потому что только у одной компании есть Оценказначение за один месяц.

Чтобы извлечь значения за один месяц, вы можете использовать df.xs(month_value, level=0), который опустит один уровень в мультииндексе, или df.xs(month_value, level=0, drop_level=False), который сохранит его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...