Удаляйте дубликаты, но сохраняйте строки, имеющие наибольшее значение в данном столбце на группу - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть DF, как это:

    Name        Gender         Age      Level
  Pikachu        Male           4         8
 Charmander     Female          5         7
 Charmander     Female          5         7
 Squirtle        Male           3         6
 Squirtle        Male           3         9
 Squirtle       Female          4         9

Я хочу, чтобы это выглядело так:

   Name        Gender         Age      Level
  Pikachu        Male           4         8
 Charmander     Female          5         7
 Squirtle        Male           3         9
 Squirtle       Female          4         9

Я не знаю, как объяснить, что я хочу сделать вАнглийский, поэтому я напишу это в псевдокоде.

В основном:

If Name, Gender and Age are the same:
      If there is a difference in levels:
            Keep the row with higher level
      If there is a tie:
            Keep a random one

Любая идея приветствуется!

Ответы [ 2 ]

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

Использование argsort и duplicated:

df[~df.iloc[np.argsort(-df.Level)].drop('Level', 1).duplicated()]

         Name  Gender  Age  Level
0     Pikachu    Male    4      8
1  Charmander  Female    5      7
4    Squirtle    Male    3      9
5    Squirtle  Female    4      9

groupby + idxmax (хотя и медленнее):

df.iloc[df.groupby(['Name','Gender', 'Age']).Level.idxmax()]

         Name  Gender  Age  Level
1  Charmander  Female    5      7
0     Pikachu    Male    4      8
5    Squirtle  Female    4      9
4    Squirtle    Male    3      9
0 голосов
/ 19 декабря 2018

Проверка с sort_values + drop_duplicates

df=df.sort_values('Level').drop_duplicates(['Name','Gender','Age'],keep='last')
df
         Name  Gender  Age  Level
2  Charmander  Female    5      7
0     Pikachu    Male    4      8
4    Squirtle    Male    3      9
5    Squirtle  Female    4      9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...