У меня есть DataFrame, в нем есть два столбца. Я хочу создать третий столбец, но чтобы он был на первом месте.
На данный момент я делаю вот так:
Сначала создаю столбец
df1['Numbers' ] = getNum
Он создается последний, потом я его удаляю и вставляю на первое место
num = df1['Numbers']
df1.drop(labels=['Numbers'], axis=1, inplace=True)
df1.insert(0, "Numbers", num)
Можно как то сразу при создании поместить его по нужному индексу?
PS Только начал изучать pandas, много чего не знаю. Заранее спасибо.
Ответ
@Эникейщик показал наиболее идиоматичный и короткий способ
Иногда возникает необходимость отсортировать/упорядочить столбцы "на лету", чтобы использовать это дальше в "chained expressions". В этом случае можно воспользоваться методом .reindex(..., axis='columns'), т.к. метод .insert() делает изменения "на месте" ("in place") и всегда возвращает None. Т.е. после него не получится вызвать следующий метод через точку.
Пример: дан след. DataFrame:
In [215]: df
Out[215]:
a b c
0 1 2 3
1 4 5 6
необходимо добавить новый столбец в качестве первого столбца и посчитать сумму всех столбцов.
In [216]: df.assign(x=[10,11]).reindex(['x'] + df.columns.tolist(), axis='columns').sum()
Out[216]:
x 21
a 5
b 7
c 9
dtype: int64
пошагово:
In [217]: df.assign(x=[10,11])
Out[217]:
a b c x
0 1 2 3 10
1 4 5 6 11
In [218]: df.assign(x=[10,11]).reindex(['x'] + df.columns.tolist(), axis='columns')
Out[218]:
x a b c
0 10 1 2 3
1 11 4 5 6
In [219]: df.assign(x=[10,11]).reindex(['x'] + df.columns.tolist(), axis='columns').sum()
Out[219]:
x 21
a 5
b 7
c 9
dtype: int64
Комментариев нет:
Отправить комментарий