Pandas: como remover duplicatas mantendo a linha com o valor máximo


Você pode usar os seguintes métodos para remover duplicatas em um DataFrame do pandas, mas manter a linha que contém o valor máximo em uma coluna específica:

Método 1: remover duplicatas em uma coluna e manter a linha com Max

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

Método 2: remover duplicatas em várias colunas e manter linha com máximo

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

Os exemplos a seguir mostram como usar cada método na prática.

Exemplo 1: Remova duplicatas em uma coluna e mantenha a linha com Max

Suponha que temos o seguinte DataFrame do pandas que contém informações sobre pontos marcados por jogadores de basquete de diferentes times:

 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

Podemos usar a seguinte sintaxe para remover linhas com nomes de equipes duplicados, mas manter linhas com valores máximos de pontos :

 #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

Cada linha com nome de equipe duplicado foi removida, mas as linhas com valor máximo de pontos foram mantidas para cada equipe .

Exemplo 2: Remova duplicatas em várias colunas e mantenha a linha com Max

Suponha que temos o seguinte DataFrame do pandas:

 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

Podemos usar a seguinte sintaxe para remover linhas com nomes de equipes e posições duplicados, mas manter linhas com valores máximos para pontos :

 #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

Todas as linhas com nomes de equipe e posição duplicados foram removidas, mas as linhas com o valor máximo de pontos foram mantidas para cada combinação de equipe e posição.

Recursos adicionais

Os tutoriais a seguir explicam como realizar outras operações comuns em pandas:

Como remover linhas duplicadas no Pandas
Como remover colunas duplicadas no Pandas
Como contar duplicatas em pandas

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *