我希望通過讓我組的最後一組:如何獲得熊貓隊的最後一組?
df.groupby(pd.TimeGrouper(freq='M')).groups[-1]:
但提供了錯誤:
KeyError: -1
使用get_group
是無用的,因爲我不知道在最後一組的值(除非有一個具體的方法來獲得這個價值?)。另外我可能想要得到最後2組,等等
我該怎麼做?
我希望通過讓我組的最後一組:如何獲得熊貓隊的最後一組?
df.groupby(pd.TimeGrouper(freq='M')).groups[-1]:
但提供了錯誤:
KeyError: -1
使用get_group
是無用的,因爲我不知道在最後一組的值(除非有一個具體的方法來獲得這個價值?)。另外我可能想要得到最後2組,等等
我該怎麼做?
您可以撥打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
mmm,我使用的是date_index,所以我很好,但你的例子有組i = 4作爲最後一組,而不是i = 5作爲最後一組。你可能想補充說你可以通過'sort = False'。雖然它可能與'a' – Tjorriemorrie 2015-02-24 11:44:14
中的重複內容無關重要當然,好的一點是,從「groups」返回的字典是否爲排序形式,以及是否安全地嘗試排序它都不清楚,如果在值列中有多個值(它們是組值),則工作如果你使用以下內容:'輸入運算符 sorted_groups = sorted(gp.groups.items(),key = operator.itemgetter(1))' – EdChum 2015-02-24 11:48:19
使用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)]
我想知道這些組是否按排序順序排列,我假設他們但是不確定感謝澄清這一點 – EdChum 2015-02-24 12:09:48
你想要的組或最後一個值?例如'df.groupby(pd.TimeGrouper(freq ='M'))。last()'返回每個組的最後一個值 – EdChum 2015-02-24 11:10:42
@EdChum不,我想要最後一組。我希望遍歷該組的數據(可能成爲n個組 - 'M'可能會改變以及到另一個時期) – Tjorriemorrie 2015-02-24 11:17:40
您可以試試這個:'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