Переместить столбец по имени в начало таблицы в pandas
Вот мой df:
Net Upper Lower Mid Zsore
Answer option
More than once a day 0% 0.22% -0.12% 2 65
Once a day 0% 0.32% -0.19% 3 45
Several times a week 2% 2.45% 1.10% 4 78
Once a week 1% 1.63% -0.40% 6 65
Как я могу переместить столбец по имени ( "Середина" ) в начало таблицы, индекс 0. Это то, что должно выглядеть так:
Mid Upper Lower Net Zsore
Answer option
More than once a day 2 0.22% -0.12% 0% 65
Once a day 3 0.32% -0.19% 0% 45
Several times a week 4 2.45% 1.10% 2% 78
Once a week 6 1.63% -0.40% 1% 65
Мой текущий код перемещает столбец по индексу через "df.columns.tolist()", но Id любит переносить его по имени.
Ответы
Ответ 1
Мы можем использовать ix
для изменения порядка, передав список:
In [27]:
# get a list of columns
cols = list(df)
# move the column to head of list using index, pop and insert
cols.insert(0, cols.pop(cols.index('Mid')))
cols
Out[27]:
['Mid', 'Net', 'Upper', 'Lower', 'Zsore']
In [28]:
# use ix to reorder
df = df.ix[:, cols]
df
Out[28]:
Mid Net Upper Lower Zsore
Answer_option
More_than_once_a_day 2 0% 0.22% -0.12% 65
Once_a_day 3 0% 0.32% -0.19% 45
Several_times_a_week 4 2% 2.45% 1.10% 78
Once_a_week 6 1% 1.63% -0.40% 65
Другой метод - взять ссылку на столбец и вставить его спереди:
In [39]:
mid = df['Mid']
df.drop(labels=['Mid'], axis=1,inplace = True)
df.insert(0, 'Mid', mid)
df
Out[39]:
Mid Net Upper Lower Zsore
Answer_option
More_than_once_a_day 2 0% 0.22% -0.12% 65
Once_a_day 3 0% 0.32% -0.19% 45
Several_times_a_week 4 2% 2.45% 1.10% 78
Once_a_week 6 1% 1.63% -0.40% 65
Вы также можете использовать loc
для достижения того же результата, что и ix
будет устаревать в будущей версии pandas из 0.20.0
далее:
df = df.loc[:, cols]
Ответ 2
Вы можете использовать функцию df.reindex() в pandas.
df есть
Net Upper Lower Mid Zsore
Answer option
More than once a day 0% 0.22% -0.12% 2 65
Once a day 0% 0.32% -0.19% 3 45
Several times a week 2% 2.45% 1.10% 4 78
Once a week 1% 1.63% -0.40% 6 65
определить список имен столбцов
cols = df.columns.tolist()
cols
Out[13]: ['Net', 'Upper', 'Lower', 'Mid', 'Zsore']
переместите имя столбца туда, где вы хотите
cols.insert(0, cols.pop(cols.index('Mid')))
cols
Out[16]: ['Mid', 'Net', 'Upper', 'Lower', 'Zsore']
затем используйте функцию df.reindex()
для изменения порядка
df = df.reindex(columns= cols)
out put: df
Mid Upper Lower Net Zsore
Answer option
More than once a day 2 0.22% -0.12% 0% 65
Once a day 3 0.32% -0.19% 0% 45
Several times a week 4 2.45% 1.10% 2% 78
Once a week 6 1.63% -0.40% 1% 65
Ответ 3
Мне не понравилось, как я должен был явно указать все остальные столбцы в других решениях, так что это сработало лучше для меня. Хотя это может быть медленно для больших фреймов данных...?
df = df.set_index('Mid').reset_index()
Ответ 4
Вот общий набор кода, который я часто использую, чтобы изменить расположение столбцов. Вы можете найти это полезным.
cols = df.columns.tolist()
n = int(cols.index('Mid'))
cols = [cols[n]] + cols[:n] + cols[n+1:]
df = df[cols]
Ответ 5
Может быть, я что-то упускаю, но многие из этих ответов кажутся слишком сложными. Вы должны иметь возможность просто установить столбцы в одном списке:
Колонка впереди:
df = df[ ['Mid'] + [ col for col in df.columns if col != 'Mid' ] ]
Или, если вместо этого, вы хотите переместить его обратно:
df = df[ [ col for col in df.columns if col != 'Mid' ] + ['Mid'] ]
Или, если вы хотите переместить более одного столбца:
cols_to_move = ['Mid', 'Zsore']
df = df[ cols_to_move + [ col for col in df.columns if col not in cols_to_move ] ]
Ответ 6
Чтобы изменить порядок строк в кадре данных, просто используйте список следующим образом.
df = df[['Mid', 'Net', 'Upper', 'Lower', 'Zsore']]
Это делает очень очевидным, что было сделано при чтении кода позже. Также используйте:
df.columns
Out[1]: Index(['Net', 'Upper', 'Lower', 'Mid', 'Zsore'], dtype='object')
Затем нарежьте и вставьте, чтобы изменить порядок.
Ответ 7
Эта функция переупорядочивает ваши столбцы без потери данных. Все пропущенные столбцы остаются в центре набора данных:
def reorder_columns(columns, first_cols=[], last_cols=[], drop_cols=[]):
columns = list(set(columns) - set(first_cols))
columns = list(set(columns) - set(drop_cols))
columns = list(set(columns) - set(last_cols))
new_order = first_cols + columns + last_cols
return new_order
Пример использования:
my_list = ['first', 'second', 'third', 'fourth', 'fifth', 'sixth']
reorder_columns(my_list, first_cols=['fourth', 'third'], last_cols=['second'], drop_cols=['fifth'])
# Output:
['fourth', 'third', 'first', 'sixth', 'second']
Чтобы назначить свой фрейм данных, используйте:
my_list = df.columns.tolist()
reordered_cols = reorder_columns(my_list, first_cols=['fourth', 'third'], last_cols=['second'], drop_cols=['fifth'])
df = df[reordered_cols]