2014-11-14 18 views
9

Esiste un modo automatico per mantenere l'ordine delle colonne ("C", "B", "A") per il dataframe restituito?Ordine colonne in gruppo Pandas Funzione Agg

g = df.groupby(['people']) 
g['people'].agg({'C' : len, 
       'B' : len, 
       'A' : len, 
       }) 

Ciò restituirà una delle colonne come A, B, C, piuttosto che C, B, A.

posso trovare solo degli esempi, ma non la documentazione per la funzione agg stesso.

Questa sembra essere una soluzione alternativa:

g = df.groupby(['people']) 
g['people'].agg({'C' : len, 
       'B' : len, 
       'A' : len, 
       }).reindex_axis(['C','B','A'], axis=1) 
+3

Hai provato a utilizzare un OrderedDict? – Korem

+1

La risposta breve è no ma è davvero l'unico modo? – slaw

+0

Dubito che ci sia un modo più semplice, il problema non è proprio pandas - I dizionari Python (predefiniti) non sono pensati per memorizzare l'ordine delle chiavi (è per questo che è stato creato "OrderedDict"). –

risposta

3

È possibile utilizzare alcuni trucchi di indicizzazione per ottenere le colonne nell'ordine in cui si vogliono:

g = df.groupby(['people']) 
col_order = ['C', 'B', 'A'] 
agg_fnxs = [len, len, len] 
agg_dict = dict(zip(col_rder, agg_fnxs)) 
g['people'].agg(agg_dict)[col_corder] 
10

OrderedDict lavorato sorprendentemente con i panda-0.18.0 -py2.7:

from collections import OrderedDict 
g = df.groupby(['people']) 
g['people'].agg(OrderedDict([ 
       ('C' , len), 
       ('B' , len), 
       ('A' , len), 
       ])) 
+0

Spot on. OrderedDict mi fa rabbrividire. Così contorto –