Hi.
I'm trying to make a population forecast based on todays population multiplied with a coefficient I calculated based on previous years population.
Now I'm struggling to write the attribute rules. I want to calculate the values "diagonally" since the people that are 1 year old 2023 are 2 years old 2024 and so on.
I attached a snippet of what I want to accomplish as well as a filegeodatabase.
Please help me to write the attribute rule
Hola Petronella. Siento escribir en Español pero lo del inglés se me da fatal y el traductor puede dar confusión por lo que veo cuando dices en diagonal es que quieres que el dato 1 del campo uno vaya al dato 2 del campo 2 y así sucesivamente. La verdad es que no creo que se pueda hacer por una regla de atributo ya que es programación en Arcade y eso parece que deseas que un cursor recorra la tabla de datos y la vaya rellenado con la multiplicación y eso es más lógico con ArcPy ya que al ser programación orientada a objetos si puede recorrer la tabla y poner el resultado en donde deseas.
Este es un ejemplo aunque no lo he probado pero sería así porque Cursor es la parte de por así decirlo programación orientada a objetos.
import arcpy
# Establecer el nombre de la tabla
tabla = "miTabla"
# Crear una lista de campos
campos = ["campo1", "campo2", "campo3", "campo4", "campo5"]
# Para cada campo en la lista de campos
for i in range(len(campos) - 1):
# Crear una lista para almacenar los valores de la fila
fila_valores = []
# Usar un cursor de búsqueda para obtener los valores del campo actual
with arcpy.da.SearchCursor(tabla, [campos[i]]) as cursor:
for fila in cursor:
fila_valores.append(fila[0])
# Multiplicar cada valor obtenido por 10
nuevos_valores = [valor * 10 for valor in fila_valores]
# Usar un cursor de actualización para cambiar los valores del siguiente campo
with arcpy.da.UpdateCursor(tabla, [campos[i + 1]]) as cursor:
count = 0
for fila in cursor:
if count < len(nuevos_valores): # No queremos actualizar más allá de los valores que tenemos
fila[0] = nuevos_valores[count]
cursor.updateRow(fila)
count += 1
lo hice con una hipótesis de que multiplique por 10 pero puedes hacer lo que desees y con 5 campos
Es importante tener en cuenta que este código asume que todas las filas tienen un valor en el campo1. Si alguna fila no tiene un valor en el campo1, es posible que debas ajustar el código para manejar este caso.
Espero que esto te ayude.