问题 Pandas Groupby Agg函数中的列顺序


是否有自动方法来维护返回的数据帧的列('C','B','A')的顺序?

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)

6596
2017-11-14 21:04


起源

你尝试过使用OrderedDict吗? - Korem
简短的回答是否定的,但这真的是唯一的方法吗? - slaw
我怀疑有一种更简单的方法,问题不是真正的熊猫 - Python(默认)词典并不意味着存储键顺序(这就是为什么 OrderedDict 被创造了)。 - toto_tico


答案:


OrderedDict与pandas-0.18.0-py2.7令人惊讶地工作:

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

11
2017-08-18 13:34



发现。 OrderedDict让我感到畏缩。太复杂了 - Benjamin Crouzier


您可以使用一些索引技巧来获得所需顺序的列:

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]

3
2017-11-16 02:56