Страницы

Поиск по вопросам

понедельник, 8 апреля 2019 г.

Создание столбца по индексу. Pandas, python

У меня есть 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

Комментариев нет:

Отправить комментарий