Soy un SIG hombre, no un programador profesional, así que estoy seguro de que hay una manera más eficiente para escribir esto. He probado el código siguiente en las maquetas de los datos que usted proporcionó. Usted tendrá que asegurarse de que funciona en un extenso conjunto de datos (de ahí la gran cantidad de comentarios así que usted puede modificar).
Pseudo Código:
- Crear un python lista de todos los valores en la tabla 2, utilizando una búsqueda cursor.
- El bucle a través de la tabla 1 con una Actualización cursor pruebas en contra de cada valor en su nueva lista.
- Si el valor actual en la lista es menor que el valor de la tabla uno, almacenarlo en una variable.
- Si el valor actual en la lista es mayor que el valor en la tabla, utilice la variable de la última iteración para actualizar el campo 2.
Secuencia de comandos:
import arcpy
# Put the absolute path to your tables / feature classes
table1 = r"C:\SomePathHere"
table2 = r"C:\SomeOtherPathHere"
# Create empty Python list
table2list = []
# Arcpy Search cursor
rows = arcpy.SearchCursor(table2)
# Get a list of all values in table2 field1
for row in rows:
table2list.append(row.Field1)
# Delete cursor objs
del row, rows
# Sort the list in numeric order, get the highest value
table2list = sorted(table2list)
highestVal = table2list[len(table2list)-1]
# Create update cursor for table1
rows = arcpy.UpdateCursor(table1)
# Nested loop -- for each row in table1 we loop through our list of table2 values
for row in rows:
# Reset stored value var for each loop
storedValue = 0
# If Field1 is less than the smallest value in table2, Field2 is equal to Field1
if (row.Field1 < table2list[0] and row.Field < 11):
row.Field2 = 0
rows.updateRow(row)
elif (row.Field1 < table2list[0] and row.Field > 10):
row.Field2 = row.Field1
rows.updateRow(row)
# If Field1 is greater than the highest value, Field2 equals highest value
elif row.Field1 > highestVal:
row.Field2 = highestVal
rows.updateRow(row)
# When the value in the list is greater than Field1, use the last value to update Field2
for i in table2list:
if i < row.Field1:
storedValue = i
else: # This is where we're actually changing the value of Field2
row.Field2 = storedValue
rows.updateRow(row)
del row, rows