Я пытаюсь найти исходное значение индекса последнего вхождения каждой группы - PullRequest
1 голос
/ 22 октября 2019

Я пытаюсь найти исходные индексы для последнего появления групповых групп.

Если у меня есть фрейм данных, заданный как:

data = {
    'Name':['Jack', 'Jill', 'Jill', 'Jill', 'Ryan',
            'Ryan','Lilian', 'Jack', 'Jack', 'Jack'],
    'Age': [15, 20, 25, 30, 23, 23, 45, 24, 65, 115]
}

df = pd.DataFrame(data)

df

Я надеюсь увидеть:

0 Jack 15
3 Jill 30
5 Ryan 23
6 Lilian 45
9 Jack 115

Пробовал использовать groupby и .last() после groupby, но это избавляет от индекса.

Ответы [ 3 ]

3 голосов
/ 22 октября 2019

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

(df.assign(k=df['Name'].ne(df['Name'].shift()).cumsum())
  .drop_duplicates(['Name','k'],keep='last'))

Или лучше, как упоминает @PiR:

df[df.Name.ne(df.Name.shift(-1))]

     Name  Age  k
0    Jack   15  1
3    Jill   30  2
5    Ryan   23  3
6  Lilian   45  4
9    Jack  115  5
3 голосов
/ 22 октября 2019

Может также

df.groupby(df.Name.ne(df.Name.shift()).cumsum()).tail(1)

     Name  Age
0    Jack   15
3    Jill   30
5    Ryan   23
6  Lilian   45
9    Jack  115
1 голос
/ 22 октября 2019

Использование , дублирование :

print(df[~df.Name.ne(df.Name.shift()).cumsum().duplicated(keep='last')])

Вывод

     Name  Age
0    Jack   15
3    Jill   30
5    Ryan   23
6  Lilian   45
9    Jack  115
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...