Панды теряют индекс после GroupBy при удалении дубликатов - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь сохранить все строки, кроме дублирующихся строк с не максимальным количеством.Итак, в конце концов у меня будут все строки с неповторными копиями.

Ввод

df
   name  amount
0     a    1000
1     a    2000
2     a    5000
3     b    1000
4     b    2000
5     c    3000
6     d    4000
7     e    5000
8     f    6000
9     g    7000
10    h    8000
11    h   10000

Ожидаемый результат:

enter image description here

dd = df[df.duplicated(['name'], keep=False)]
idx = dd.groupby(['name'], sort=False)['amount'].max()

Это дает мне серию без значений индекса без df.Как я могу получить ожидаемый результат?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Может проверить idxmax

df.loc[df.groupby('name').amount.idxmax()]
   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
0 голосов
/ 18 декабря 2018

Вы можете избежать 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

Это, в общем, не сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...