Voici mon 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
Comment puis-je déplacer une colonne par son nom ("Mid") au début de la table, index 0. Voici à quoi cela doit ressembler:
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
Mon code actuel déplace la colonne par index via "df.columns.tolist ()" mais je préfère le déplacer par Nom.
Nous pouvons utiliser ix
pour réorganiser en passant une liste:
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
Une autre méthode consiste à prendre une référence à la colonne et à la réinsérer au début:
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
Vous pouvez également utiliser loc
pour obtenir le même résultat, car ix
sera obsolète dans une version ultérieure de pandas de 0.20.0
à partir de:
df = df.loc[:, cols]
Vous pouvez utiliser la fonction df.reindex () dans les pandas. df est
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
définir une liste de noms de colonnes
cols = df.columns.tolist()
cols
Out[13]: ['Net', 'Upper', 'Lower', 'Mid', 'Zsore']
déplacez le nom de la colonne où vous voulez
cols.insert(0, cols.pop(cols.index('Mid')))
cols
Out[16]: ['Mid', 'Net', 'Upper', 'Lower', 'Zsore']
puis utilisez df.reindex()
fonction pour réorganiser
df = df.reindex(columns= cols)
out mis est: 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
Je n'ai pas aimé la façon dont j'ai dû spécifier explicitement toutes les autres colonnes des autres solutions, de sorte que cela a fonctionné mieux pour moi. Bien que cela puisse être lent pour les grandes trames de données ...?
df = df.set_index('Mid').reset_index()
Peut-être me manque quelque chose, mais beaucoup de ces réponses semblent trop compliquées. Vous devriez pouvoir simplement définir les colonnes dans une seule liste:
Colonne à l'avant:
df = df[ ['Mid'] + [ col for col in df.columns if col != 'Mid' ] ]
Ou si vous préférez le déplacer à l'arrière:
df = df[ [ col for col in df.columns if col != 'Mid' ] + ['Mid'] ]
Ou si vous voulez déplacer plus d'une colonne:
cols_to_move = ['Mid', 'Zsore']
df = df[ cols_to_move + [ col for col in df.columns if col not in cols_to_move ] ]
Voici un ensemble de code générique que j’utilise fréquemment pour réorganiser la position des colonnes. Vous pourriez le trouver utile.
cols = df.columns.tolist()
n = int(cols.index('Mid'))
cols = [cols[n]] + cols[:n] + cols[n+1:]
df = df[cols]
Pour réorganiser les lignes d'une image, utilisez simplement une liste comme suit.
df = df[['Mid', 'Net', 'Upper', 'Lower', 'Zsore']]
Cela rend très évident ce qui a été fait lors de la lecture ultérieure du code. Utiliser aussi:
df.columns
Out[1]: Index(['Net', 'Upper', 'Lower', 'Mid', 'Zsore'], dtype='object')
Puis couper et coller pour réorganiser.