如何在Pandas的小组中获得最后一组?

时间:2015-02-24 11:09:16

标签: python pandas

我希望通过以下方式获得我小组的最后一组:

df.groupby(pd.TimeGrouper(freq='M')).groups[-1]:

但是会出错:

  

KeyError:-1

使用get_group是没用的,因为我不知道最后一组的值(除非有特定的方法来获取该值?)。另外,我可能想要获得最后两组等等

我该怎么做?

2 个答案:

答案 0 :(得分:4)

使用Ed的例子 你可以切出最后一组。这些组以正确的顺序迭代(意味着给定的顺序,或者由选项确定的排序)。

In [12]: df = pd.DataFrame({'a':['1','2','2','4','5','2'], 'b':np.random.randn(6)})

In [13]: g = df.groupby('a')

In [14]: g.groups
Out[14]: {'1': [0], '2': [1, 2, 5], '4': [3], '5': [4]}

In [15]: import itertools

In [16]: list(itertools.islice(g,len(g)-1,len(g)))
Out[16]: 
[('5',    a         b
  4  5 -0.644857)]

答案 1 :(得分:1)

您可以调用last来计算每个组的最后一个值,并使用iloc获取行值并使用name属性访问索引组值,可能有一个更好的方法,但无法解决这个问题:

In [170]:
# dummy data
df = pd.DataFrame({'a':['1','2','2','4','5','2'], 'b':np.random.randn(6)})
df
Out[170]:
   a         b
0  1  0.097176
1  2 -1.400536
2  2  0.352093
3  4 -0.696436
4  5 -0.308680
5  2 -0.217767
In [179]:

gp = df.groupby('a', sort=False)
gp.get_group(df.groupby('a').last().iloc[-1].name)
Out[179]:
   a         b
4  5  0.608724
In [180]:

df.groupby('a').last().iloc[-2:]
Out[180]:
          b
a          
4  0.390451
5  0.608724
In [181]:

mult_groups = gp.last().iloc[-2:].index
In [182]:

for gp_val in mult_groups:
    print(gp.get_group(gp_val))
   a         b
3  4  0.390451
   a         b
4  5  0.608724