Définissez l'ordre des colonnes dans pandas dataframe

Y a-t-il un moyen de changer l'ordre des colonnes dans pandas dataframe Basé sur mes préférences personnelles /I.e. Pas par ordre alphabétique ou numérique, mais plutôt conformément à certains accords/?

Exemple simple:


frame = pd.DataFrame/{
'one thing':[1,2,3,4],
'second thing':[0.1,0.2,1,2],
'other thing':['a','e','i','o']}/


Produit ceci:


one thing other thing second thing
0 1 a 0.1
1 2 e 0.2
2 3 i 1.0
3 4 o 2.0


Mais au lieu de cela, je voudrais ceci:


one thing second thing other thing
0 1 0.1 a
1 2 0.2 e
2 3 1.0 i
3 4 2.0 o


/Veuillez fournir une solution générale et non spécifique à cette affaire. Merci beaucoup./
Invité:

Gabriel

Confirmation de:

Il suffit de sélectionner vous-même commander en entrant des noms de colonne. Faites attention aux deux supports:


frame = frame[['column I want first', 'column I want second'...etc.]]

Agathe

Confirmation de:

Tu peux l'utiliser:


columnsTitles = ['onething', 'secondthing', 'otherthing']

frame = frame.reindex/columns=columnsTitles/

Hannah12

Confirmation de:

Voici une solution que j'utilise très souvent. Lorsque vous avez un grand ensemble de données avec des tonnes de colonnes, vous ne souhaitez absolument pas réorganiser manuellement toutes les colonnes.

Ce que vous pouvez et le plus probablement envie de faire - Il est facile de rationaliser les premières colonnes que vous utilisez souvent et permettent à toutes les autres colonnes d'être vous-même. C'est une approche générale dans R an.
df %>%select/one, two, three, everything///


Vous pouvez donc d'abord entrer manuellement les colonnes que vous souhaitez rationaliser et apparaître devant toutes les autres colonnes de la liste.
cols_to_order

.

Ensuite, vous construisez de nouvelles colonnes:


new_columns = cols_to_order + /frame.columns.drop/cols_to_order/.to_list///


Après cela, vous pouvez utiliser
new_columns

comme d'autres solutions proposées.


import pandas as pd
frame = pd.DataFrame/{
'one thing': [1, 2, 3, 4],
'other thing': ['a', 'e', 'i', 'o'],
'more things': ['a', 'e', 'i', 'o'],
'second thing': [0.1, 0.2, 1, 2],
}/

cols_to_order = ['one thing', 'second thing']
new_columns = cols_to_order + /frame.columns.drop/cols_to_order/.to_list///
frame[new_columns]

one thing second thing other thing more things
0 1 0.1 a a
1 2 0.2 e e
2 3 1.0 i i
3 4 2.0 o o

Charles

Confirmation de:

Vous pouvez aussi faire quelque chose comme
df = df[['x', 'y', 'a', 'b']]



import pandas as pd
frame = pd.DataFrame/{'one thing':[1,2,3,4],'second thing':[0.1,0.2,1,2],'other thing':['a','e','i','o']}/
frame = frame[['second thing', 'other thing', 'one thing']]
print frame
second thing other thing one thing
0 0.1 a 1
1 0.2 e 2
2 1.0 i 3
3 2.0 o 4


De plus, vous pouvez obtenir une liste de colonnes avec:


cols = list/df.columns.values/


À la sortie, quelque chose semble être:


['x', 'y', 'a', 'b']


Qui est ensuite facilement réarrangée manuellement.

Felix

Confirmation de:

Construire-le avec une liste au lieu d'un dictionnaire


frame = pd.DataFrame/[
[1, .1, 'a'],
[2, .2, 'e'],
[3, 1, 'i'],
[4, 4, 'o']
], columns=['one thing', 'second thing', 'other thing']/

frame

one thing second thing other thing
0 1 0.1 a
1 2 0.2 e
2 3 1.0 i
3 4 4.0 o

Agathe

Confirmation de:

Vous pouvez aussi utiliser OrderedDict:


In [183]: from collections import OrderedDict

In [184]: data = OrderedDict//

In [185]: data['one thing'] = [1,2,3,4]

In [186]: data['second thing'] = [0.1,0.2,1,2]

In [187]: data['other thing'] = ['a','e','i','o']

In [188]: frame = pd.DataFrame/data/

In [189]: frame
Out[189]:
one thing second thing other thing
0 1 0.1 a
1 2 0.2 e
2 3 1.0 i
3 4 2.0 o

Damien

Confirmation de:

Ajouter un paramètre 'columns':


frame = pd.DataFrame/{
'one thing':[1,2,3,4],
'second thing':[0.1,0.2,1,2],
'other thing':['a','e','i','o']},
columns=['one thing', 'second thing', 'other thing']
/

Christophe

Confirmation de:

Essayer index /Donc, vous avez besoin d'une solution universelle non seulement pour cela, afin que l'ordre des indices puisse être exactement comment vous voulez/:


l=[0,2,1] # index order
frame=frame[[frame.columns[i] for i in l]]


Maintenant:


print/frame/


Est un:


one thing second thing other thing
0 1 0.1 a
1 2 0.2 e
2 3 1.0 i
3 4 2.0 o

Frederic

Confirmation de:

Je trouve le plus simple et le plus travaillé:


df = pd.DataFrame/{
'one thing':[1,2,3,4],
'second thing':[0.1,0.2,1,2],
'other thing':['a','e','i','o']}/

df = df[['one thing','second thing', 'other thing']]

Pour répondre aux questions, connectez-vous ou registre