Взятие разных записей из групп с помощью group by in pandas - PullRequest
0 голосов
/ 18 июня 2020

Предположим, у меня есть такой фрейм данных

>>> df = pd.DataFrame({'id':[1,1,1,2,2,2,2,3,4],'value':[1,2,3,1,2,3,4,1,1]})
>>> df
   id  value
0   1      1
1   1      2
2   1      3
3   2      1
4   2      2
5   2      3
6   2      4
7   3      1
8   4      1

Теперь я хочу, чтобы все записи из каждой группы использовались с идентификатором группы, кроме последней 3. Это означает, что я хочу удалить последние 3 записи из всех групп. Как это сделать с помощью pandas group_by. Это фиктивные данные.

1 Ответ

1 голос
/ 18 июня 2020

Используйте GroupBy.cumcount для счетчика, начиная с ascending=False, а затем сравните с Series.gt для больших значений, таких как 2, потому что python отсчитывается от 0:

df = df[df.groupby('id').cumcount(ascending=False).gt(2)]
print (df)
   id  value
3   2      1

Подробности :

print (df.groupby('id').cumcount(ascending=False))
0    2
1    1
2    0
3    3
4    2
5    1
6    0
7    0
8    0
dtype: int64
...