python group by two columns,由一个索引提取第一个元素

时间:2013-11-20 15:23:28

标签: python group-by pandas multi-index

如果我使用groupby功能,例如Data.groupby(['id','company']).size(),它会产生如下结果:

id   company 
1    a        2
     b        3
     c        6
2    d        1
     e        5

但是如何根据第一个索引级别组的排序顺序提取数字[2,1](每个第0个索引级别组的第一个元素)?

1 个答案:

答案 0 :(得分:3)

首先,让:

agg_df = Data.groupby(['id','company']).size()

假设您希望第一个条目的结果对于MultiIndex的第0级具有相同值的每个元素组,并且每个组按照您的喜好按第一个索引级别排序。 (更新后的评论后,这似乎是所需的输出)

unique_zeroth_level = dict(agg_df.index.values).keys()
group_first_vals = [
    agg_df.select(lambda x: x[0]==idx_val, axis=0).head(1).values[0] 
    for idx_val in unique_zeroth_level]

假设您要求生成的MultiIndex

的第0级的唯一元素

在这种特殊情况下,由于返回的结果是一个系列,您可以使用unstack使用技巧:

agg_df.unstack(level=0).columns.values

或使用dict构造函数

dict(agg_df.index.values).keys()

假设您特别想要(1, 'a')(2, 'd')的结果,并且您希望通过索引值访问它们(不仅仅是因为这些是按字典顺序排列的第一个条目在他们各自的小组中)

agg_df.ix[[(1, 'a'), (2, 'd')]]