У меня есть следующее DataFrame
( df
):
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.rand(10, 5))
Я добавляю больше столбцов по заданию:
df['mean'] = df.mean(1)
Как я могу переместить столбец mean
вперед, то есть установить его в качестве первого столбца, оставив порядок остальных столбцов без изменений?
MultiIndex
. Е. Нет .Ответы:
Одним простым способом было бы переназначить фрейм данных со списком столбцов, переставленных по мере необходимости.
Это то, что у вас есть сейчас:
Переставь
cols
так, как хочешь. Вот как я переместил последний элемент на первую позицию:Затем измените порядок данных таким образом:
источник
cols
являетсяlist
; он даже допускает дубликаты (которые будут отбрасываться при использовании в кадре данных). Вы думаете обIndex
объектах.Вы также можете сделать что-то вроде этого:
Вы можете получить список столбцов с:
Выход будет производить:
... который затем легко переставить вручную, прежде чем поместить его в первую функцию
источник
df.columns.tolist()
df = df[['mean1', 0, 1, 2, 3]]
✓pd.read_csv()
. Как ваш ответ может быть использован для изменения порядка столбцов?Просто назначьте имена столбцов в том порядке, в котором вы хотите:
Теперь «средняя» колонка выходит впереди:
источник
<df>.columns
что изначально претендуетеКак насчет:
http://pandas.pydata.org/pandas-docs/stable/dsintro.html#column-selection-addition-deletion
источник
pandas
? что-то вродеdf.move(0,df.mean)
?df_metadata.insert(0,'Db_name',"raw_data")
(Код не относится к этой теме)*** ValueError: cannot insert mean, already exists
В твоем случае,
будет делать именно то, что вы хотите.
В моем случае (общая форма):
источник
copy=False
но, похоже,reindex_axis
все еще создает копию.Вам нужно создать новый список ваших столбцов в нужном порядке, а затем использовать
df = df[cols]
для перестановки столбцов в этом новом порядке.Вы также можете использовать более общий подход. В этом примере последний столбец (обозначенный -1) вставляется как первый столбец.
Вы также можете использовать этот подход для переупорядочения столбцов в желаемом порядке, если они присутствуют в DataFrame.
источник
Вы можете попробовать следующие решения:
Решение 1:
Решение 2:
Решение 3:
Решение 4:
Решение 5:
Решение 6:
Сравнение времени:
Решение 1:
Решение 2 :
Решение 3 :
Решение 4 :
Решение 5 :
Решение 6 :
источник
df = df.iloc[:, [1, 2, 3, 0]]
С августа 2018 года:
Если имена ваших столбцов слишком длинные для ввода, вы можете указать новый порядок через список целых чисел с позициями:
Данные:
Общий пример:
А для конкретного случая вопроса ОП:
Основная проблема этого подхода заключается в том, что многократный вызов одного и того же кода каждый раз будет приводить к разным результатам, поэтому нужно быть осторожным :)
источник
Эта функция избавляет вас от необходимости перечислять каждую переменную в наборе данных, чтобы упорядочить несколько из них.
Он принимает два аргумента: первый - это набор данных, второй - столбцы в наборе данных, которые вы хотите вывести на передний план.
Так что в моем случае у меня есть набор данных с именем Frame с переменными A1, A2, B1, B2, Total и Date. Если я хочу вывести Total на фронт, все, что мне нужно сделать, это:
Если я хочу вывести Total и Date на первый план, тогда я делаю:
РЕДАКТИРОВАТЬ:
Еще один полезный способ использовать это, если у вас есть незнакомая таблица и вы ищете переменные с определенным термином в них, например, VAR1, VAR2, ... вы можете выполнить что-то вроде:
источник
Я сам столкнулся с похожим вопросом и просто хотел добавить то, на чем остановился. Мне понравилось
reindex_axis() method
для изменения порядка столбцов. Это сработало:Альтернативный метод, основанный на комментарии @Jorge:
Хотя
reindex_axis
кажется, что он немного быстрее в тестах микро, чемreindex
, я думаю, я предпочитаю последний из-за его прямоты.источник
Просто сделай,
источник
order = df.columns.tolist()
df['mean'] = df.mean(1)
df.columns = ['mean'] + order
headers
который использовался для создания dict, который затем использовался для создания DataFrame, я вызвалdf.reindex(columns=headers)
. Единственной проблемой, с которой я столкнулся, было то, что я уже позвонилdf.set_index('some header name', inplace=True)
, поэтому, когда переиндексация была выполнена, он добавил еще один столбец с именем,some header name
поскольку исходный столбец теперь был индексом. Что касается синтаксиса, указанного выше, то['mean'] + df.columns
в интерпретаторе python мне даетсяIndex(u'meanAddress', u'meanCity', u'meanFirst Name'...
Вы могли бы сделать следующее (заимствуя части из ответа Амана):
источник
Просто введите имя столбца, который вы хотите изменить, и установите индекс для нового местоположения.
Для вашего случая это будет выглядеть так:
источник
Перемещение любого столбца в любую позицию:
источник
Я думаю, что это немного более аккуратное решение:
Это решение несколько похоже на решение @JoeHeffer, но это один лайнер.
Здесь мы удаляем столбец
"mean"
из кадра данных и присоединяем его к индексу0
с тем же именем столбца.источник
Вот способ переместить один существующий столбец, который изменит существующий фрейм данных на месте.
источник
Этот вопрос был дан ответ , прежде чем , но reindex_axis осуждается в настоящее время , так что я бы предложил использовать:
источник
Как насчет использования "T"?
источник
@clocker: Ваше решение было очень полезным для меня, так как я хотел вывести два столбца вперед из кадра данных, где я не знаю точно имена всех столбцов, потому что они были сгенерированы ранее из сводной инструкции. Итак, если вы находитесь в той же ситуации: чтобы вывести перед собой столбцы, имена которых вы знаете, а затем позволить им следовать «все остальные столбцы», я пришел к следующему общему решению;
источник
set()
:Используется простой подход
set()
, в частности, когда у вас длинный список столбцов и вы не хотите обрабатывать их вручную:источник
Мне понравился ответ шореша использовании заданной функциональности для удаления столбцов, когда вы не знаете местоположение, однако это не сработало для моей цели, так как мне нужно сохранить исходный порядок столбцов (в котором есть произвольные метки столбцов).
Я получил это, чтобы работать, хотя с помощью IndexedSet из пакета boltons.
Мне также нужно было повторно добавить несколько меток столбцов, поэтому для более общего случая я использовал следующий код:
Надеюсь, что это полезно для всех, кто ищет в этой теме общее решение.
источник
set
для этого довольно часто и никогда не приходилось иметь дело с заказом.Вы можете использовать,
reindex
который может быть использован для обеих осей:источник
Вот функция, чтобы сделать это для любого количества столбцов.
источник
Самый хакерский метод в книге
источник
Я думаю, что эта функция более проста. Вам просто нужно указать подмножество столбцов в начале или конце или оба:
источник
Я считаю, что ответ @ Aman является лучшим, если вы знаете местоположение другой колонки.
Если вы не знаете, где находится
mean
, но имеете только его название, вы не можете прибегнуть непосредственно к немуcols = cols[-1:] + cols[:-1]
. Следующее - лучшая вещь, которую я мог придумать:источник
Просто листать помогает часто.
Или просто перемешать для взгляда.
источник
Довольно простое решение, которое сработало для меня, - это использовать .reindex для df.columns:
источник
Самый простой способ Предположим, у вас есть
df
с колонкамиA
B
C
, вы можете простоdf.reindex(['B','C','A'],axis=1)
источник
Большинство ответов недостаточно обобщены, и метод pandas reindex_axis немного утомителен, поэтому я предлагаю простую функцию для перемещения произвольного числа столбцов в любую позицию, используя словарь, в котором ключ = имя столбца и значение = позиция для перемещения. Если ваш фрейм данных имеет большой размер, передайте True в 'big_data', тогда функция вернет список упорядоченных столбцов. И вы можете использовать этот список, чтобы нарезать свои данные.
источник