Как сгруппировать по одному столбцу, при этом отфильтровать по второму, исходя из значений третьего

Есть такая таблица:

ACCOUNTID   ZONENUMBER  HOURS
65.0    ccac    6.93
221.0   8ee8    10.27
242.0   a444    8.00
242.0   a54b    6.00
250.0   a77f    9.97
... ... ... ...
8172118.0   5edf    6.08
8172215.0   9788    6.00
8172220.0   718e    6.17
8172254.0   a54b    5.08
8172276.0   19b0    7.00

В колонке ACCOUNTID есть повторения, поэтому нужно сгруппировать по ней, но при этом значение ZONENUMBER должно быть выбрано из той строки, где HOURS больше. Всю голову сломал ничего не выходит...


Ответы (2 шт):

Автор решения: splash58

Группируем, получаем индекс максимального элемента HOURS в группе, берем по этому индексу ZONENUMBER

df.groupby('ACCOUNTID').apply(lambda x: x.loc[x['HOURS'].idxmax()]['ZONENUMBER'])

результат

ACCOUNTID
65.0     ccac
221.0    8ee8
242.0    a444
250.0    a77f
dtype: object
→ Ссылка
Автор решения: Алексей Р

.drop_duplicates() тоже вариант

df.sort_values(['ACCOUNTID', 'HOURS']).drop_duplicates('ACCOUNTID', keep='last')
   ACCOUNTID ZONENUMBER  HOURS
0       65.0       ccac   6.93
1      221.0       8ee8  10.27
2      242.0       a444   8.00
4      250.0       a77f   9.97
5  8172118.0       5edf   6.08
6  8172215.0       9788   6.00
7  8172220.0       718e   6.17
8  8172254.0       a54b   5.08
9  8172276.0       19b0   7.00
→ Ссылка