Как сгруппировать по одному столбцу, при этом отфильтровать по второму, исходя из значений третьего
Есть такая таблица:
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