A pandas
drop_duplicates
função é ótima para "unificar" um quadro de dados. No entanto, um dos argumentos de palavra-chave a ser aprovado é take_last=True
ou take_last=False
, enquanto eu gostaria de eliminar todas as linhas duplicadas em um subconjunto de colunas. Isso é possível?
A B C
0 foo 0 A
1 foo 1 A
2 foo 1 B
3 bar 1 A
Como exemplo, eu gostaria de soltar linhas que correspondam às colunas A
e, C
portanto, isso deve soltar as linhas 0 e 1.
python
pandas
duplicates
Jamie Bull
fonte
fonte
df.reindex(df.iloc[:,[0,2]].drop_duplicates(keep=False).index)
?df.drop_duplicates(subset=[df.columns[0:2]], keep = False)
Só quero adicionar a resposta de Ben em drop_duplicates :
keep
: {'primeiro', 'último', Falso}, padrão 'primeiro'primeiro: elimine duplicatas, exceto a primeira ocorrência.
last: elimina duplicatas, exceto a última ocorrência.
Falso: elimine todas as duplicatas.
Portanto, definir
keep
Falso fornecerá a resposta desejada.fonte
Se você deseja que o resultado seja armazenado em outro conjunto de dados:
ou
Se o mesmo conjunto de dados precisar ser atualizado:
Os exemplos acima removerão todas as duplicatas e manterão uma, semelhante à
DISTINCT *
do SQLfonte
usar
groupby
efilter
fonte
Na verdade, as linhas 0 e 1 descartadas requerem apenas (são mantidas quaisquer observações que contenham A e C correspondentes.):
Mas eu suspeito que o que você realmente quer é isso (uma observação contendo A e C correspondentes é mantida.):
Editar:
Agora é muito mais claro, portanto:
fonte
df.drop_duplicates(['A','C'])
como padrão para manter uma observação, a primeira ou a última, como mencionei na pergunta - embora eu tenha acabado de perceber que a palavra-chave estava errada enquanto escrevia de memória. O que eu quero é eliminar todas as linhas que são idênticas nas colunas de interesse (A e C nos dados de exemplo).Experimente estas várias coisas
ou
ou
fonte