1
votes

positionner ou déplacer la colonne pandas vers un index de colonne spécifique

J'ai un DF mydataframe et il a plusieurs colonnes (plus de 75 colonnes) avec un index numérique par défaut:

mydataframe.columns.get_loc("Col2")

Je dois organiser / changer la position comme suit:

Col1 Col3 Col2 ... Coln 

Je peux obtenir l'index de Col2 en utilisant:

Col1 Col2 Col3 ... Coln

mais je ne semble pas être en mesure de comprendre comment permuter, sans lister manuellement toutes les colonnes, puis réorganiser manuellement dans une liste.


0 commentaires

4 Réponses :


3
votes

Essayez :

new_cols = [Col1, Col3, Col2] + df.columns[3:]

df = df[new_cols]


0 commentaires

2
votes

Comment procéder:

  1. stocker les noms des colonnes dans une liste;
  2. permuter les noms de cette liste;
  3. appliquer la nouvelle commande sur le dataframe.

code:

l = list(df)

i1, i2 = l.index('Col2'), l.index('Col3')
l[i2], l[i1] = l[i1], l[i2]

df = df[l]


1 commentaires

J'ai pu développer cela pour répondre à mes besoins. Merci.



0
votes

Utilisation de np.r_ pour créer un tableau d'index de colonne:

Exemple donné comme suit:

df:
   col1  col2  col3  col4  col5  col6  col7  col8  col9  col10
0     0     1     2     3     4     5     6     7     8      9
1    10    11    12    13    14    15    16    17    18     19


i, j = df.columns.slice_locs('col2', 'col10')
df[df.columns[np.r_[:i, i+1, i, i+2:j]]]

Out[142]:
   col1  col3  col2  col4  col5  col6  col7  col8  col9  col10
0     0     2     1     3     4     5     6     7     8      9
1    10    12    11    13    14    15    16    17    18     19


0 commentaires

0
votes

J'imagine que vous voulez ce que @sentence suppose. Vous souhaitez permuter les positions de 2 colonnes, où qu'elles se trouvent.

Il s'agit d'une approche créative:

  1. Créez un dictionnaire qui définit quelles colonnes sont permutées avec quoi.
  2. Définissez une fonction qui prend un nom de colonne et renvoie un ordre.
  3. Utilisez cette fonction comme clé de tri.

df = pd.DataFrame(
    np.arange(25).reshape(5, 5)
).add_prefix('Col')

Configuration

d = {'Col3': 'Col2', 'Col2': 'Col3'}
k = lambda x: df.columns.get_loc(d.get(x, x))

df[sorted(df, key=k)]

   Col0  Col1  Col3  Col2  Col4
0     0     1     3     2     4
1     5     6     8     7     9
2    10    11    13    12    14
3    15    16    18    17    19
4    20    21    23    22    24


0 commentaires