Столбцы фреймов данных переупорядочиваются на основе списка — Фреймы данных имеют разные столбцы

#python #pandas #dataframe #columnsorting

#python #панды #фрейм данных #сортировка столбцов

Вопрос:

КРАТКОЕ ИЗЛОЖЕНИЕ моей проблемы:

  • У меня много фреймов данных, все с ОДИНАКОВЫМ НАБОРОМ столбцов (7 столбцов, например, COLUMN1: COLUMN7), НО иногда один или несколько столбцов отсутствуют (т.Е. В фрейме данных может быть COLUMN1: COLUMN3 COLUMN6: COLUMN7, следовательно, отсутствуют 4-й и 5-й столбцы).
  • Каждый фрейм данных имеет столбцы, расположенные в разном порядке каждый раз (т. Е. df1 имеет свой порядок, df2 имеет другой порядок, df3 еще один порядок и так далее …).
  • Я хочу упорядочить столбцы в каждом фрейме данных на основе списка столбцов, который служит эталоном (в данном случае список столбцов от 1 до 7).
  • Желаемым результатом было бы, чтобы все фреймы данных имели одинаковый порядок столбцов на основе этого списка, если столбец отсутствует, порядок должен быть сохранен (т. Е. Если столбцы 4 и 5 отсутствуют, порядок столбцов должен быть: COL1, COL2, COL3, COL6, COL7).

Более подробное описание:

В моем коде есть несколько фреймов данных, которые создаются путем очистки некоторых наборов данных. Каждый из этих фреймов данных имеет РАЗНОЕ КОЛИЧЕСТВО столбцов и в РАЗНОМ ПОРЯДКЕ, НО столбцы ограничены этим списком : 'id', 'title', 'type', 'category', 'secondary category', 'date', 'description' . Следовательно, столбцов может быть не более 7 из этого списка. Пример:

DataFrame1 'id', 'title', 'date', 'category', 'type', 'description', 'secondary category'

DataFrame2 'id', 'description', 'title', 'type', 'category', 'date'

DataFrame3 'id', 'category', 'description', 'title'

ЖЕЛАЕМЫЙ РЕЗУЛЬТАТ:

Я хотел бы упорядочить столбцы на основе исходного списка 'id', 'title', 'type', 'category', 'secondary category', 'date', 'description' , даже если количество столбцов меняется. Из приведенного выше примера фреймы данных должны стать:

DataFrame1 'id', 'title', 'type', 'category', 'secondary category', 'date', 'description'

DataFrame2 'id', 'title', 'type', 'category', 'date', 'description'

DataFrame3 'id', 'title', 'category', 'description'

есть ли способ, например, цикл, упорядочить столбцы таким образом?

Ответ №1:

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

 desired_order = ['id', 'title', 'type', 'category', 'secondary category', 'date', 'description']

df = df.reindex([i for i in desired_order if i in df.columns], axis=1)