Tenho uma lista de itens que provavelmente apresentam alguns problemas de exportação. Gostaria de obter uma lista dos itens duplicados para poder compará-los manualmente. Quando tento usar o método duplicado do pandas , ele retorna apenas a primeira duplicata. Existe uma maneira de obter todas as duplicatas e não apenas a primeira?
Uma pequena subseção do meu conjunto de dados se parece com isto:
ID,ENROLLMENT_DATE,TRAINER_MANAGING,TRAINER_OPERATOR,FIRST_VISIT_DATE
1536D,12-Feb-12,"06DA1B3-Lebanon NH",,15-Feb-12
F15D,18-May-12,"06405B2-Lebanon NH",,25-Jul-12
8096,8-Aug-12,"0643D38-Hanover NH","0643D38-Hanover NH",25-Jun-12
A036,1-Apr-12,"06CB8CF-Hanover NH","06CB8CF-Hanover NH",9-Aug-12
8944,19-Feb-12,"06D26AD-Hanover NH",,4-Feb-12
1004E,8-Jun-12,"06388B2-Lebanon NH",,24-Dec-11
11795,3-Jul-12,"0649597-White River VT","0649597-White River VT",30-Mar-12
30D7,11-Nov-12,"06D95A3-Hanover NH","06D95A3-Hanover NH",30-Nov-11
3AE2,21-Feb-12,"06405B2-Lebanon NH",,26-Oct-12
B0FE,17-Feb-12,"06D1B9D-Hartland VT",,16-Feb-12
127A1,11-Dec-11,"064456E-Hanover NH","064456E-Hanover NH",11-Nov-12
161FF,20-Feb-12,"0643D38-Hanover NH","0643D38-Hanover NH",3-Jul-12
A036,30-Nov-11,"063B208-Randolph VT","063B208-Randolph VT",
475B,25-Sep-12,"06D26AD-Hanover NH",,5-Nov-12
151A3,7-Mar-12,"06388B2-Lebanon NH",,16-Nov-12
CA62,3-Jan-12,,,
D31B,18-Dec-11,"06405B2-Lebanon NH",,9-Jan-12
20F5,8-Jul-12,"0669C50-Randolph VT",,3-Feb-12
8096,19-Dec-11,"0649597-White River VT","0649597-White River VT",9-Apr-12
14E48,1-Aug-12,"06D3206-Hanover NH",,
177F8,20-Aug-12,"063B208-Randolph VT","063B208-Randolph VT",5-May-12
553E,11-Oct-12,"06D95A3-Hanover NH","06D95A3-Hanover NH",8-Mar-12
12D5F,18-Jul-12,"0649597-White River VT","0649597-White River VT",2-Nov-12
C6DC,13-Apr-12,"06388B2-Lebanon NH",,
11795,27-Feb-12,"0643D38-Hanover NH","0643D38-Hanover NH",19-Jun-12
17B43,11-Aug-12,,,22-Oct-12
A036,11-Aug-12,"06D3206-Hanover NH",,19-Jun-12
Meu código se parece com este atualmente:
df_bigdata_duplicates = df_bigdata[df_bigdata.duplicated(cols='ID')]
Existem alguns itens duplicados. Mas, quando uso o código acima, recebo apenas o primeiro item. Na referência da API, vejo como posso obter o último item, mas gostaria de ter todos eles para que possa inspecioná-los visualmente para ver por que estou obtendo a discrepância. Portanto, neste exemplo, gostaria de obter todas as três entradas A036 e 11795 entradas e quaisquer outras entradas duplicadas, em vez de apenas a primeira. Qualquer ajuda é muito apreciada.
fonte
ID
, não" linhas idênticas em múltiplas ou todas as colunas ".Respostas:
Método # 1: imprima todas as linhas onde o ID é um dos IDs duplicados:
mas não consegui pensar em uma maneira legal de evitar a repetição
ids
tantas vezes. Prefiro o método 2:groupby
no ID.fonte
g for _
faz?g for (placeholder, g) in df.groupby('bla') if 'bla'
; o sublinhado é um símbolo típico para placeholder de um argumento inevitável onde não queremos usá-lo para nada em uma expressão semelhante a lambda.sort
foi descontinuado para DataFrames em favor de umsort_values
ou de umsort_index
relacionado SO Q&ACom o Pandas versão 0.17, você pode definir 'keep = False' na função duplicada para obter todos os itens duplicados.
fonte
'all'
seria IMO mais lógico e intuitivo.ele retornará todas as linhas duplicadas de volta para você.
De acordo com a documentação :
fonte
Como não posso comentar, postarei como uma resposta separada
Para encontrar duplicatas com base em mais de uma coluna, mencione cada nome de coluna conforme abaixo, e ele retornará a você todas as linhas duplicadas definidas:
fonte
Isso funcionou para mim
fonte
== True
,.duplicated()
já retorna o array bool.Usando um elemento lógico ou e definindo o argumento take_last do método duplicated pandas para True e False, você pode obter um conjunto de seu dataframe que inclui todas as duplicatas.
fonte
Isso pode não ser uma solução para a questão, mas para ilustrar exemplos:
As saídas:
fonte
sort("ID")
não parece estar funcionando agora, parece obsoleto de acordo com o documento de classificação , então usesort_values("ID")
para classificar após o filtro duplicado, da seguinte maneira:fonte
Para meu banco de dados duplicado (manter = Falso) não funcionou até que a coluna fosse classificada.
fonte
df[df.duplicated(['ID'])==True].sort_values('ID')
fonte