Pandas: як видалити дублікати, зберігаючи рядок із максимальним значенням


Ви можете використати такі методи, щоб видалити дублікати в pandas DataFrame, але зберегти рядок, який містить максимальне значення в певному стовпці:

Спосіб 1: видалення дублікатів у стовпці та збереження рядка з макс

 df. sort_values (' var2 ', ascending= False ). drop_duplicates (' var1 '). sort_index ()

Спосіб 2: видаліть дублікати в кількох стовпцях і збережіть рядок із макс

 df. sort_values (' var3 ', ascending= False ). drop_duplicates ([' var1 ', ' var2 ']). sort_index ()

Наступні приклади показують, як використовувати кожен метод на практиці.

Приклад 1: видаліть дублікати в стовпці та збережіть рядок із Макс

Припустимо, що у нас є наступний DataFrame pandas, який містить інформацію про очки, набрані баскетболістами різних команд:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
                   ' points ': [20, 24, 28, 30, 14, 19, 29, 40, 22]})

#view DataFrame
print (df)

  team points
0 to 20
1 to 24
2 to 28
3 B 30
4 B 14
5 B 19
6 C 29
7 C 40
8 C 22

Ми можемо використовувати наступний синтаксис, щоб видалити рядки з повторюваними назвами команд , але зберегти рядки з максимальними значеннями для балів :

 #drop duplicate teams but keeps row with max points
df_new = df. sort_values (' points ', ascending= False ). drop_duplicates (' team '). sort_index ()

#view DataFrame
print (df_new)

  team points
2 to 28
3 B 30
7 C 40

Кожен рядок із дублюваною назвою команди було видалено, але рядки з максимальним значенням балів збережено для кожної команди .

Приклад 2: видалення дублікатів у кількох стовпцях і збереження рядка з Макс

Припустімо, що у нас є наступні pandas DataFrame:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
                   ' position ': ['G', 'G', 'F', 'G', 'F', 'F', 'G', 'G', 'F'],
                   ' points ': [20, 24, 28, 30, 14, 19, 29, 40, 22]})

#view DataFrame
print (df)

  team position points
0 AG 20
1 GA 24
2AF 28
3 BG 30
4 BF 14
5 BF 19
6 GC 29
7 GC 40
8 CF 22

Ми можемо використовувати наступний синтаксис, щоб видалити рядки з повторюваними назвами команд і посад , але зберегти рядки з максимальними значеннями для очок :

 #drop rows with duplicate team and positions but keeps row with max points
df_new = df. sort_values (' points ', ascending= False ). drop_duplicates ([' team ',' position ']). sort_index ()

#view DataFrame
print (df_new)

  team position points
1 GA 24
2AF 28
3 BG 30
5 BF 19
7 GC 40
8 CF 22

Кожен рядок із дублікатом команди та назви позиції було видалено, але рядки з максимальним значенням балів були збережені для кожної комбінації команди та позиції.

Додаткові ресурси

У наступних посібниках пояснюється, як виконувати інші типові операції в pandas:

Як видалити повторювані рядки в Pandas
Як видалити дублікати стовпців у Pandas
Як порахувати дублікати в пандах

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *