Сортировка столбцов Pandas по количеству уникальных групп

Я пытаюсь отсортировать раздел категориальных данных из набора данных kaggle Цены на жилье. Я пытаюсь отсортировать столбцы по количеству уникальных категорий. Чтобы не загромождать вопрос, я включил небольшой раздел фрейма данных (всего 80 столбцов), чтобы продемонстрировать проблему.

    LotConfig    Street    MSZoning
0   Inside       Pave      RL
1   FR2          Pave      RL
2   Corner       Grvl      RL

Я стремлюсь отсортировать столбцы для достижения следующего результата.

    MSZoning    Street    LotConfig    
0   RL          Pave      Inside       
1   RL          Pave      FR2          
2   RL          Grvl      Corner      

В настоящее время я использую следующий код.

sorted_categories =  sorted(df.columns, key = lambda col: df[col].nunique())
df = df[sorted_categories]

Есть ли лучший способ решить эту проблему? Мне не хватает метода pandas для достижения этого?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете вызвать nunique напрямую и проиндексировать свой исходный DataFrame, используя результат:

u = df.nunique().sort_values().index
df[u]

  MSZoning Street LotConfig
0       RL   Pave    Inside
1       RL   Pave       FR2
2       RL   Grvl    Corner

df.nunique() вернет серию уникальных значений для каждого столбца.

>>> df.nunique()
LotConfig    3
Street       2
MSZoning     1
dtype: int64

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

Таким образом, для фактического DataFrame метод sorted(code) принимает 4.5 ms ± 42 µs per loop, а df.nunique().sort_values().index принимает 6.33 ms ± 51.5 µs per loop. Мне было интересно, как это будет масштабироваться, как вы упомянули. Должен ли я изменить свой вопрос с результатами для гораздо большего DataFrame? Недостаточно места в поле для комментариев. Не имея доступа к аналогичному категориальному DataFrame, я просто повторил существующий DataFrame и выполнил ту же операцию

Josmoor98 11.04.2019 13:58

Другие вопросы по теме