Главный ответ делает слишком много работы и выглядит очень медленным для больших наборов данных. apply
является медленным и его следует избегать, если это возможно. ix
устарел, и его также следует избегать.
df.sort_values('B', ascending=False).drop_duplicates('A').sort_index()
A B
1 1 20
3 2 40
4 3 10
Или просто группировать все остальные столбцы и брать максимум необходимого столбца. df.groupby('A', as_index=False).max()