2015-02-24 43 views
1

我希望通過讓我組的最後一組:如何獲得熊貓隊的最後一組?

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

但提供了錯誤:

KeyError: -1

使用get_group是無用的,因爲我不知道在最後一組的值(除非有一個具體的方法來獲得這個價值?)。另外我可能想要得到最後2組,等等

我該怎麼做?

+0

你想要的組或最後一個值?例如'df.groupby(pd.TimeGrouper(freq ='M'))。last()'返回每個組的最後一個值 – EdChum 2015-02-24 11:10:42

+0

@EdChum不,我想要最後一組。我希望遍歷該組的數據(可能成爲n個組 - 'M'可能會改變以及到另一個時期) – Tjorriemorrie 2015-02-24 11:17:40

+0

您可以試試這個:'df.groupby(pd.TimeGrouper(freq ='M'))。get_group (df.groupby(pd.TimeGrouper(freq ='M'))。last()。iloc [-1] .name)' – EdChum 2015-02-24 11:26:20

回答

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 
+0

mmm,我使用的是date_index,所以我很好,但你的例子有組i = 4作爲最後一組,而不是i = 5作爲最後一組。你可能想補充說你可以通過'sort = False'。雖然它可能與'a' – Tjorriemorrie 2015-02-24 11:44:14

+0

中的重複內容無關重要當然,好的一點是,從「groups」返回的字典是否爲排序形式,以及是否安全地嘗試排序它都不清楚,如果在值列中有多個值(它們是組值),則工作如果你使用以下內容:'輸入運算符 sorted_groups = sorted(gp.groups.items(),key = operator.itemgetter(1))' – EdChum 2015-02-24 11:48:19

3

使用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)] 
+0

我想知道這些組是否按排序順序排列,我假設他們但是不確定感謝澄清這一點 – EdChum 2015-02-24 12:09:48