¿Campo de incremento automático basado en grupos dentro de la clase de entidad?

10

Necesito incrementar automáticamente un campo basado en grupos dentro de una clase de entidad. Tengo 8 parcelas dentro de un polígono dado y necesito asignarles una ID de 1-8 para cada conjunto de parcelas dentro de cada polígono. El polígono tendría su propio número de identificación único que se usaría para agrupar las parcelas.

Supongo que sería una alteración de esto:

rec=0
def autoIncrement():
 global rec
 pStart = 1 
 pInterval = 1 
 if (rec == 0): 
  rec = pStart 
 else: 
  rec = rec + pInterval 
 return rec
Becks
fuente
1
Probablemente quiera leer sobre el uso del operador de módulo de Python ( %)
Vince

Respuestas:

12

Calculadora de campo para Python

d={}
def GroupOrder(groupID):
  if groupID in d: d[groupID]+=1
  else: d[groupID]=1
  return d[groupID]

---------------------------

GroupOrder( !locality! )

¡Cambio! ¡Localidad! al campo relevante.

ACTUALIZACIÓN: Esta variación de expresión:

d={}
def GroupOrder(groupID):
  N=d.get(groupID,0);N+=1
  d[groupID]=N
  return N

Debería funcionar mucho más rápido en grandes conjuntos de datos.

FelixIP
fuente
Si la función GroupOrder se usara en un script de Python independiente, la GroupOrderfunción sería el code blockargumento y el argumento de GroupOrder( !locality! )'expresión'.
user3467260
En la secuencia de comandos es: a) crear diccionario b) actualizar el cursor en el grupo de 2 campos y uno para rellenar. 3-5 líneas de código.
FelixIP
1
No mencioné en mi comentario que esos argumentos se incluirían en la herramienta de cálculo de campo arcpy: arcpy.CalculateField_management(inTable, fieldName, expression, "PYTHON_9.3", codeblock)si se usa en una secuencia de comandos independiente. Gracias por describir los pasos de un enfoque diferente para usar su código en un script independiente.
user3467260
Todo bien. De todos modos, tengo la impresión de que el cursor da es mucho más rápido que la calculadora de campo.
FelixIP