2017-03-09 5 views
1

Je travaille actuellement sur une base de données à partir d'une opération de tableau croisé.Organisation de colonnes dans un fichier pandas DataFrame

pd.crosstab(data['One'],data['two'], margins=True).apply(lambda r: r/len(data)*100,axis = 1) 

Les colonnes sont dans l'ordre suivant

A B C D E All 
B 
C 
D 
E 
All    100 

Mais je veux que les colonnes commandées comme indiqué ci-dessous:

A C D B E All 
B 
C 
D 
E 
All    100 

Yat-il un moyen facile d'organiser les colonnes? quand je l'utilise colnames=['C', 'D','B','E'] il renvoie une erreur:

'AssertionError: arrays and names must have the same length ' 

Répondre

0

Vous pouvez utiliser reindex ou reindex_axis ou modifier l'ordre par subset:

colnames=['C', 'D','B','E'] 
new_cols = colnames + ['All'] 

#solution 1 change ordering by reindexing 
df1 = df.reindex_axis(new_cols,axis=1) 
#solution 2 change ordering by reindexing 
df1 = df.reindex(columns=new_cols) 
#solution 3 change order by subset 
df1 = df[new_cols] 

print (df1) 
    C D B E All 
0 NaN NaN NaN NaN NaN 
1 NaN NaN NaN NaN NaN 
2 NaN NaN NaN NaN NaN 
3 NaN NaN NaN NaN NaN 
4 NaN NaN NaN NaN 100.0 
0

Pour spécifier les colonnes de tout dataframe en pandas géants, index juste avec une liste des colonnes dans l'ordre que vous voulez:

columns = ['A', 'C', 'D', 'B', 'E', 'All'] 
df2 = df.loc[:, columns] 
print(df2) 
0

Merci encore, il semble que la .reindex_axis() a fonctionné pour moi et l'autre a continué à retourner des erreurs. Merci encore.