В Pandas, как я могу изменить groupby
, чтобы принимать только первые N элементов в группе?Как фильтровать groupby для первых N элементов
Пример
df = pd.DataFrame({'id': [1, 1, 1, 2, 2, 2, 2],
'values': [1, 2, 3, 4, 5, 6, 7]})
>>> df
id values
0 1 1
1 1 2
2 1 3
3 2 4
4 2 5
5 2 6
6 2 7
Желаемая функциональность
# This doesn't work, but I am trying to return the first two items per group.
>>> df.groupby('id').first(2)
id values
0 1 1
1 1 2
3 2 4
4 2 5
То, что я пытался
Я могу выполнить GroupBy и перебирать группы взять индекс от первого n
, но должно быть более простое решение.
n = 2 # First two rows.
idx = [i for group in df.groupby('id').groups.itervalues() for i in group[:n]]
>>> df.ix[idx]
id values
0 1 1
1 1 2
3 2 4
4 2 5
Это более простой ответ, который я искал. Благодарю. – Alexander
@ Александр некоторые из них кажутся скрытыми (в основном, поскольку существует множество способов), связанные с хвостом и n-м. –