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
Як порахувати дублікати в пандах