сохранить второй уровень мультииндекса в целости при сортировке на первом питоне pandas - PullRequest
1 голос
/ 08 мая 2019

Я отсортировал свой первый уровень индекса, используя следующий метод: Пользовательская функция порядка сортировки для python groupby

def my_func(group):
    return sum(group["B"]*group["C"])

idx=df.groupby('A').apply(my_func).reindex(df.index.get_level_values(0))
df.iloc[idx.argsort()]

Проблема заключается в том, что порядок второго уровня перемешанпосле сортировки по первому.Как я могу убедиться, что внутригрупповой порядок сохраняется?

от

A   B C
1 0 1 8
  1 3 3
2 0 1 2
  1 2 2
3 0 1 3
  1 2 4

до

A   B C
2 0 1 2
  1 2 2
3 0 1 3
  1 2 4
1 0 1 8
  1 3 3

и нет (последние 2 строки инвертированы)

A   B C
2 0 1 2
  1 2 2
3 0 1 3
  1 2 4
1 1 3 3
  0 1 8

1 Ответ

0 голосов
/ 08 мая 2019

Я думаю, вам нужна стабильная сортировка algo - mergesort:

idx=df.index.get_level_values(0).map(df.groupby('A').apply(my_func))
df = df.iloc[idx.argsort(kind='mergesort')]
print (df)
     B  C
A        
2 0  1  2
  1  2  2
3 0  1  3
  1  2  4
1 0  1  8
  1  3  3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...