Есть много способов сделать это, определенно.Вот два:
marathon[marathon.TimeS == marathon.groupby('Year').TimeS.transform('max')]
или
marathon[marathon.TimeS.isin(marathon.groupby('Year').TimeS.max())]
Давайте проверим некоторые из этих промежуточных объектов
In [29]: marathon.groupby('Year').TimeS.max()
Out[29]:
Year
1973 8514
1974 9893
Name: TimeS, dtype: int64
Итак, мы получаем серию, но только из двух значений,Таким образом, мы можем индексировать фрейм данных везде, где значения столбцов равны одному из них, что является вторым решением.
В первом решении вместо этого используется transform('max')
, который сохраняет размер кадра данных:
In [30]: marathon.groupby('Year').TimeS.transform('max')
Out[30]:
0 8514
1 8514
2 8514
3 9893
4 9893
5 9893
6 9893
Name: TimeS, dtype: int64
Так что теперь это тот же размер, и мы можем просто сравнить равенство непосредственно со столбцами, что оноравно.
Обратите внимание, что если максимальные значения встречаются несколько раз, оба этих метода также будут возвращать дубликаты - которые могут быть, а могут и не быть теми, которые вы хотите.