#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, в этом есть смысл