python - seleccionar - Mover la columna por nombre al frente de la tabla en pandas
seleccionar columnas pandas python (4)
Aquí hay un conjunto genérico de código que uso frecuentemente 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]
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. Esto es lo que necesita para verse así:
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 desplazarla por Nombre.
No me gustó cómo tuve que especificar explícitamente toda la otra columna 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()
Podemos usar ix
para reordenar al pasar 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 volver a insertarla en el frente:
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 desde 0.20.0
adelante:
df = df.loc[:, cols]
Puede 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 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