Mueve la columna por nombre al frente de la mesa en pandas

Aquí está mi 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 

¿Cómo puedo mover una columna por nombre (“Medio”) al frente de la tabla, índice 0. Así es como debe verse:

  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 

Mi código actual mueve la columna por índice a través de “df.columns.tolist ()”, pero me gustaría cambiarlo por Nombre.

Podemos usar ix para reordenar pasando una lista:

 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 

Otro método es tomar una referencia a la columna y reinsertarla en la parte delantera:

 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 

También puede usar loc para lograr el mismo resultado, ya que ix quedará obsoleto en una versión futura de pandas a partir de 0.20.0 adelante:

 df = df.loc[:, cols] 

Puedes usar la función df.reindex () en pandas. df es

  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 

definir una lista de nombres de columna

 cols = df.columns.tolist() cols Out[13]: ['Net', 'Upper', 'Lower', 'Mid', 'Zsore'] 

mueve el nombre de la columna a donde quieras

 cols.insert(0, cols.pop(cols.index('Mid'))) cols Out[16]: ['Mid', 'Net', 'Upper', 'Lower', 'Zsore'] 

luego use la función df.reindex() para reordenar

 df = df.reindex(columns= cols) 

fuera de puesto es: 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 

No me gustó cómo tuve que especificar explícitamente todas las otras columnas en las otras soluciones, así que esto funcionó mejor para mí. Aunque podría ser lento para grandes marcos de datos …?

df.set_index('Mid').reset_index()

Aquí hay un conjunto genérico de código que uso con frecuencia para reorganizar la posición de las columnas. Lo podrías encontrar útil.

 cols = df.columns.tolist() n = int(cols.index('Mid')) cols = [cols[n]] + cols[:n] + cols[n+1:] df = df[cols]