Вы можете избежать groupby
и сохранить индекс, используя sort_values
и drop_duplicates
:
df.sort_values('amount', ascending=False).drop_duplicates('name').sort_index()
name amount
2 a 5000
4 b 2000
5 c 3000
6 d 4000
7 e 5000
8 f 6000
9 g 7000
11 h 10000
Вы можете избежать последнего sort_index
вызова с помощью:
df[~df.sort_values('amount', ascending=False).name.duplicated()]
name amount
2 a 5000
4 b 2000
5 c 3000
6 d 4000
7 e 5000
8 f 6000
9 g 7000
11 h 10000
С пониманием, что логическое индексирование переиндексирует DataFrame.Вы должны быть в порядке с UserWarning
, однако:
UserWarning: Boolean Series key will be reindexed to match DataFrame index.
Особый случай
Поскольку ваши данные выглядят отсортированнымиуже вы можете просто сделать
df[~df.duplicated('name', keep='last')]
name amount
2 a 5000
4 b 2000
5 c 3000
6 d 4000
7 e 5000
8 f 6000
9 g 7000
11 h 10000
Это, в общем, не сработает.