Вы можете использовать логическое индексирование с GroupBy
+ transform
.Обратите внимание, что включает в себя дубликаты максимумов по группам.
df = df[df['f0max'] == df.groupby('file')['f0max'].transform('max')]
Или вы можете сортировать, а затем отбрасывать дубликаты вашим группировщиком.Если для группы существуют дублированные максимумы, то будет сохранен только один:
df = df.sort_values('f0max', ascending=False)\
.drop_duplicates('file')
Результат:
print(df)
f0max file maxtime
0 9 1 1
3 6 2 4
6 3 3 7