Оставить только строки с максимальным значением
У меня есть датафрейм с сотрудниками компаний и с их (сотрудников) днями рождения:
import pandas as pd
df = pd.DataFrame.from_dict({'company': {0: 'AAA', 1: 'AAA', 2: 'AAA', 3: 'AAA', 4: 'AAA', 5: 'BBB', 6: 'BBB',
7: 'BBB', 8: 'CCC', 9: 'CCC', 10: 'CCC', 11: 'CCC', 12: 'CCC'},
'employee': {0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e', 5: 'f', 6: 'j',
7: 'k', 8: 'l', 9: 'm', 10: 'n', 11: 'o', 12: 'p'},
'bday': {0: '13.02.1992', 1: '25.05.1993', 2: '22.07.1994', 3: '14.08.1994', 4: '16.09.1996',
5: '02.10.1996', 6: '22.07.1993', 7: '01.05.1995', 8: '01.01.1996', 9: '01.02.1993',
10: '04.05.1995', 11: '06.07.1999', 12: '01.01.1991'}})
df['bday'] = pd.to_datetime(df['bday'], dayfirst=True)
df.groupby(['company', 'employee']).max()
Не получается оставить строки только с самыми молодыми сотрудниками по каждой компании. Нужно, чтобы вывод был таким:
AAA a 1992-02-13
BBB f 1996-10-02
CCC l 1996-01-01
Как мне оставить в df только строки с максимальной датой по группе 'company'?
Пытаюсь
df['yongest'] = df.apply(lambda x: max(i['bday'] for i in df if i['company'] == x['company']))
но ругается
TypeError: string indices must be integers
Ответы (2 шт):
Автор решения: strawdog
→ Ссылка
res = df[df.groupby('company')['bday'].transform("max") == df['bday']]
company employee bday
4 AAA e 1996-09-16
5 BBB f 1996-10-02
11 CCC o 1999-07-06
Автор решения: Алексей Р
→ Ссылка
Сортируем фрейм по датам рождения. Группируем по компаниям. В каждой группе выбираем последнюю строку - это и есть самый молодой сотрудник.
df = df.sort_values('bday').groupby('company').agg('last')
employee bday
company
AAA e 1996-09-16
BBB f 1996-10-02
CCC o 1999-07-06