Серия Pandas с несколькими индексами в групповой сортировке

#pandas

#pandas

Вопрос:

У меня есть серия многоиндексных индексов pandas

 Low    A          0.888889
       B          0.361111
Open   B          0.000000
       C          1.000000
  

Есть ли способ отсортировать вышеуказанное в каждой группе (низкая, открытая)?

Если я назову .sort_values() это, сортирует всю серию, а это не то, что я хочу. Я хочу сохранить ее группировку.

Я также пытался перебирать каждую группу, сортировать и переназначать, НО это было неверно, поскольку значения были отсортированы по меткам (ABC), а не по меткам, поэтому они полностью перепутались.

Спасибо

Комментарии:

1. не могли бы вы поделиться кодом для генерации данных

2. Есть только 2 значения? Low и Open ?

3. исходная функция для создания данных имеет длину около 200 строк. приведенный выше код представляет собой небольшой фрагмент кода. Я помню, что есть вызов метода, который выводит код, поэтому при его запуске он создает тот же фрейм данных … но забыл, как он был вызван. Отличный способ отправить ваш код другим пользователям… ребята, вы знаете?

Ответ №1:

Используйте, если сначала нет имен уровней Series.rename_axis , а затем GroupBy.apply и Series.sort_values для правильного порядка сортировки также с индексами:

 s = (s.rename_axis(['id1','id2'])
      .groupby('id1', group_keys=False, sort=False)
      .apply(pd.Series.sort_values)))
print (s)
id1   id2
Low   B      0.361111
      A      0.888889
Open  B      0.000000
      C      1.000000
Name: val, dtype: float64
  

Комментарии:

1. похоже, вы используете ту же логику, что и моя 🙂 хороший ~

2. @BEN_YO — да, интересно transform не менять индексы.

3. Похоже, что transform изменяет массив, а не объект pandas

4. @BEN_YO — ya, в этом есть смысл