2014-11-14 88 views
9

是否有一種自動方法來維護返回的數據框的列順序('C','B','A')?Pandas Group by Agg函數中的列順序

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

這將返回一列的A,B,C,而不是C,B,A

我只能找到例子,但不是爲AGG功能本身的文檔。

這似乎是一種解決方法:

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

您是否嘗試過使用OrderedDict? – Korem 2014-11-14 21:07:24

+1

簡短的答案是否定的,但這真的是唯一的方法嗎? – slaw 2014-11-15 01:13:28

+0

我懷疑有一種更簡單的方法,問題並不是真正的熊貓 - Python(默認)字典並不意味着存儲鍵順序(這就是爲什麼創建OrderedDict的原因)。 – 2017-06-26 08:51:31

回答

3

你可以使用一些索引過關獲得的順序列你想:

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與大熊貓,令人驚訝的0.18.0工作-py2.7:

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

現貨。 OrderedDict讓我感到困難。太複雜了 – 2018-02-21 02:31:57