Estou procurando registros duplicados em arquivos dbf com base no atributo chamado 'ID'. Eu tenho vários arquivos dbf de 500.000 registros a 1,5 milhão e sei que há uma série de duplicatas.
Eu gostaria de adicionar um campo 'Duplicar' que diga Sim ou Não (ou 1 ou 0 está correto) quando o atributo ID estiver presente em outro lugar. O uso do seguinte script python na Calculadora de campo retorna 1 para uma entrada duplicada e 0 para uma entrada exclusiva;
uniqueList = []
def isDuplicate(inValue):
if inValue in uniqueList:
return 1
else:
uniqueList.append(inValue)
return 0
isDuplicate(!FIELD_NAME!)
No entanto, o 1º registro, por exemplo, de 5 IDs duplicados também será retornado como 0 (os 4 subsequentes são considerados duplicados). Eu precisaria que todos os 5 fossem marcados como duplicados, pois o ID existe em outro lugar.
O uso do código a seguir fornecerá uma contagem incremental de quantas vezes esse ID ocorre com 1, significando a 1ª ocasião e assim por diante;
UniqueDict = {}
def isDuplicateIndex(inValue):
UniqueDict.setdefault(inValue,0)
UniqueDict[inValue] += 1
return UniqueDict[inValue]
isDuplicateIndex( !YOUR_FIELD! )
Eu só quero um 1 (ou Sim) se o ID desse registro existir em outro lugar! (ArcGIS versão 10.1)
Eu já vi outras respostas, como o script Python, para identificar registros duplicados (acompanhamento), mas não funciona muito bem.
Outra solução alternativa ( funciona apenas com ambientes SDE ) é usar a funcionalidade SQL existente no ArcGIS para mostrar os registros duplicados
Obter registros duplicados na tabela (selecione por atributo)
Exemplo:
fonte
HAVING COUNT(*) > 1
. Realmente não vejo uma maneira de fazê-lo funcionar em bancos de dados geográficos de arquivos . Sei que este artigo técnico é um pouco datado, mas parece ser a fonte da sua instrução SQL e indica que não funciona nos bancos de dados geográficos de arquivos. Estou pronto para votar sua resposta, se eu puder fazê-lo funcionar no arquivo gdbs, ou esclarecimentos são adicionados para indicar que são a exceção.O script a seguir cria um novo campo com o número de ocorrências de cada valor de um campo especificado. Portanto, por exemplo, se você tiver "Paris" 6 vezes nesse campo, cada linha com "Paris" receberá 6.
Ele pode ser facilmente modificado para que você possa ter "Sim" ou 1 se contar> 1, mas acho que ter o número de contagem real é mais útil.
Editar mais tarde: Ou você pode usar isso na calculadora de campo. Código do script pré-lógico:
campo duplicado =
fonte