varias seleccionar seleccion data columnas columna agregar python pandas move dataframe shift

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