Как изменить порядок столбцов в DataFrame?
У меня есть следующий DataFrame (df
):
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.rand(10, 5))
Я добавил новый столбец с именем mean
следующим образом:
df['mean'] = df.mean(1)
Как я могу переместить столбец mean
на первое место, оставив порядок остальных столбцов неизменным?
5 ответ(ов)
Один из простых способов изменить порядок столбцов в DataFrame — это пересоздать его, указав новый порядок столбцов в виде списка.
Вот как выглядит ваш DataFrame сейчас:
In [6]: df
Out[6]:
0 1 2 3 4 mean
0 0.445598 0.173835 0.343415 0.682252 0.582616 0.445543
1 0.881592 0.696942 0.702232 0.696724 0.373551 0.670208
2 0.662527 0.955193 0.131016 0.609548 0.804694 0.632596
3 0.260919 0.783467 0.593433 0.033426 0.512019 0.436653
4 0.131842 0.799367 0.182828 0.683330 0.019485 0.363371
5 0.498784 0.873495 0.383811 0.699289 0.480447 0.587165
6 0.388771 0.395757 0.745237 0.628406 0.784473 0.588529
7 0.147986 0.459451 0.310961 0.706435 0.100914 0.345149
8 0.394947 0.863494 0.585030 0.565944 0.356561 0.553195
9 0.689260 0.865243 0.136481 0.386582 0.730399 0.561593
Для начала, давайте создадим список текущих столбцов:
In [7]: cols = df.columns.tolist()
In [8]: cols
Out[8]: [0L, 1L, 2L, 3L, 4L, 'mean']
Теперь вы можете перетасовать cols
так, как вам нужно. Например, вот как я переместил последний элемент на первое место:
In [12]: cols = cols[-1:] + cols[:-1]
In [13]: cols
Out[13]: ['mean', 0L, 1L, 2L, 3L, 4L]
Теперь можно перестроить DataFrame в новом порядке столбцов:
In [16]: df = df[cols] # ИЛИ df = df.ix[:, cols]
In [17]: df
Out[17]:
mean 0 1 2 3 4
0 0.445543 0.445598 0.173835 0.343415 0.682252 0.582616
1 0.670208 0.881592 0.696942 0.702232 0.696724 0.373551
2 0.632596 0.662527 0.955193 0.131016 0.609548 0.804694
3 0.436653 0.260919 0.783467 0.593433 0.033426 0.512019
4 0.363371 0.131842 0.799367 0.182828 0.683330 0.019485
5 0.587165 0.498784 0.873495 0.383811 0.699289 0.480447
6 0.588529 0.388771 0.395757 0.745237 0.628406 0.784473
7 0.345149 0.147986 0.459451 0.310961 0.706435 0.100914
8 0.553195 0.394947 0.863494 0.585030 0.565944 0.356561
9 0.561593 0.689260 0.865243 0.136481 0.386582 0.730399
Теперь столбец 'mean' находится на первом месте в DataFrame.
Вы можете сделать что-то подобное:
df = df[['mean', '0', '1', '2', '3']]
Чтобы получить список столбцов, вы можете использовать:
cols = list(df.columns.values)
Вывод будет следующим:
['0', '1', '2', '3', 'mean']
...что затем легко переставить вручную перед передачей в первую функцию.
Вы можете просто переназначить названия столбцов в том порядке, в котором вам нужно. Для этого выполните следующий код:
df = df[['mean', 4, 3, 2, 1]]
Теперь столбец 'mean' будет отображаться первым. Пример результата:
mean 4 3 2 1
0 1 0.190717 0.712833 0.043387 0.915661
1 1 0.617472 0.771080 0.590779 0.424771
2 1 0.155563 0.829491 0.989798 0.085894
3 1 0.951802 0.616751 0.299708 0.104061
4 1 0.322311 0.105886 0.421360 0.528156
5 1 0.736652 0.195162 0.224656 0.082047
6 1 0.507564 0.586563 0.318016 0.558108
7 1 0.337060 0.921786 0.930248 0.375183
8 1 0.423398 0.110675 0.931756 0.182905
9 1 0.417808 0.304561 0.140873 0.310562
Таким образом, вы можете легко изменить порядок столбцов в DataFrame в соответствии с вашими потребностями.
Для Pandas >= 1.3 (ответ обновлён в 2022):
df.insert(0, 'mean', df.pop('mean'))
Что касается версии Pandas < 1.3 (оригинальный ответ):
df.insert(0, 'mean', df['mean'])
Обратите внимание, что в новой версии вы можете использовать pop
, чтобы переместить столбец, что удобнее, так как это удаляет столбец из исходного DataFrame и возвращает его значение. В старой версии вам нужно было просто вставить значение столбца, но это не удалит его из DataFrame. Для получения дополнительной информации о работе со столбцами в Pandas, вы можете ознакомиться с документацией.
В вашем случае:
df = df.reindex(columns=['mean', 0, 1, 2, 3, 4])
сделает именно то, что вам нужно.
В моем случае (общая форма):
df = df.reindex(columns=sorted(df.columns))
df = df.reindex(columns=(['opened'] + list([a for a in df.columns if a != 'opened'])))
Таким образом, вы можете задать порядок столбцов в DataFrame в зависимости от ваших требований.
Как удалить строки DataFrame в Pandas с NaN в определённом столбце
Выбор нескольких колонок в DataFrame Pandas
Как выбрать строки из DataFrame на основе значений столбцов?
Преобразование списка словарей в DataFrame pandas
Объединение двух столбцов текста в DataFrame pandas