Создайте маску для идентификации двух последних строк в группах в Pandas кадре данных - PullRequest
0 голосов
/ 16 января 2020

У меня есть Pandas фрейм данных, который включает переменную группировки. Пример можно получить с помощью:

df = pd.DataFrame({'grp':['a','a','b','b','b','c','d','d','d','d'],
                   'data':[4,5,3,6,7,8,9,8,7,3]})

..., который выглядит следующим образом:

  grp  data
0   a     4
1   a     5
2   b     3
3   b     6
4   b     7
5   c     8
6   d     9
7   d     8
8   d     7
9   d     3

Я могу получить последние две строки каждой группы, используя:

dfgrp = df.groupby('grp').tail(2)

Однако я хотел бы создать маску, которая идентифицирует последние две строки (или 1 строку, если существует только 1), в идеале создавая вывод, который выглядит следующим образом:

0     True
1     True
2    False
3     True
4     True
5     True
6    False
7    False
8     True
9     True

Я думал, что это будет относительно простой, но я не смог найти решение. Предложения будут с благодарностью.

1 Ответ

4 голосов
/ 16 января 2020

Если ваш индекс уникален, вы можете сделать это, используя isin.

import pandas as pd

df = pd.DataFrame({'grp':['a','a','b','b','b','c','d','d','d','d'],
                   'data':[4,5,3,6,7,8,9,8,7,3]})
df['mask'] = df.index.isin(df.groupby('grp').tail(2).index)
df

grp data    mask
0   a   4   True
1   a   5   True
2   b   3   False
3   b   6   True
4   b   7   True
5   c   8   True
6   d   9   False
7   d   8   False
8   d   7   True
9   d   3   True
...