2015-02-24 2 views
1

Я хотел бы получить последнюю группу моей группы:Как получить последнюю группу в группе Панд?

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

но выдает ошибку:

KeyError: -1

Использования get_group бесполезно, поскольку я не знаю значение последней группы (если есть определенный способ получить эту ценность?). Также мне может понадобиться получить последние 2 группы и т. Д.

Как это сделать?

+0

Вам нужна группа или последнее значение? например, 'df.groupby (pd.TimeGrouper (freq = 'M')). last()' возвращает последнее значение для каждой группы – EdChum

+0

@EdChum Нет, мне нужна последняя 1 группа. Я хочу перебрать данные этой группы (может стать n группами - «M» может измениться и на другой период) – Tjorriemorrie

+0

Не могли бы вы попробовать: 'df.groupby (pd.TimeGrouper (freq = 'M')). Get_group (df.groupby (pd.TimeGrouper (freq = 'M')). last(). iloc [-1] .name) ' – EdChum

ответ

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

+0

Конечно, хорошо, что мне непонятно, если dict, который возвращается из' groups', находится в сортированной форме или нет, и можно ли считать, что он будет сортировать, t, если у вас есть несколько значений в столбце значений (которые являются значениями группы), например если вы используете следующее: 'import operator sorted_groups = sorted (gp.groups.items(), key = operator.itemgetter (1))' – EdChum

3

Использование примера Эд Вы можете отрезать последнюю группу. Группы повторяются в правильном порядке (что означает данный порядок или сортируется, как определено опциями).

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

Смежные вопросы