Estoy buscando registros duplicados en archivos dbf basados en el atributo llamado 'ID'. Tengo varios archivos dbf de 500,000 registros a 1.5 millones y sé que hay una gran cantidad de duplicados.
Me gustaría agregar un campo 'Duplicar' que dice Sí o No (o 1 o 0 está bien) cuando el atributo ID está presente en otro lugar. El uso de la siguiente secuencia de comandos de Python en Field Calculator devuelve 1 para una entrada duplicada y 0 para una entrada única;
uniqueList = []
def isDuplicate(inValue):
if inValue in uniqueList:
return 1
else:
uniqueList.append(inValue)
return 0
isDuplicate(!FIELD_NAME!)
Sin embargo, el primer registro de, por ejemplo, 5 ID duplicados también se devolverá como un 0 (los 4 siguientes se consideran duplicados). Necesitaría que los 5 se marquen como duplicados ya que la ID existe en otro lugar.
El uso del siguiente código le dará un recuento incremental de cuántas veces se produce esa ID con 1, es decir, la primera ocasión, etc.
UniqueDict = {}
def isDuplicateIndex(inValue):
UniqueDict.setdefault(inValue,0)
UniqueDict[inValue] += 1
return UniqueDict[inValue]
isDuplicateIndex( !YOUR_FIELD! )
¡Solo quiero un 1 (o Sí) si la ID de ese registro existe en otro lugar! (ArcGIS versión 10.1)
He visto otras respuestas como el script Python para identificar registros duplicados (seguimiento) pero no funciona del todo.
Otra solución alternativa ( solo funciona con entornos SDE ) es usar la funcionalidad SQL existente en ArcGIS para mostrar los registros duplicados
Obtener registros duplicados en la tabla (seleccionar por atributo)
Ejemplo:
fuente
HAVING COUNT(*) > 1
. Realmente no veo una manera de hacerlo funcionar en geodatabases de archivos . Sé que este artículo técnico está algo anticuado, pero parece ser la fuente de su declaración SQL e indica que no funciona en geodatabases de archivos. Estoy listo para votar su respuesta si puedo hacer que funcione en el archivo gdbs, o se agrega una aclaración para indicar que son la excepción.El siguiente script crea un nuevo campo con el número de apariciones de cada valor de un campo especificado. Entonces, por ejemplo, si tienes "París" 6 veces en ese campo, cada fila con "París" obtendrá un 6.
Se puede modificar fácilmente para que pueda tener "Sí" o 1 si cuenta> 1, pero supongo que tener el número de cuenta real es más útil.
Edición posterior: o puede usar esto en la calculadora de campo. Código de script pre-lógico:
campo duplicado =
fuente