# Adding sequential number according to change value of next field using ArcPy

4087
4
03-15-2016 02:55 PM
New Contributor

My goal is to create and fill data like (Field 3) from (Field 1) using the Field Calculator.

I was able to assigning sequential numbers using ArcPy code out there, but it gave me results of (Field 2).

I assume I need double loop to achieve the result of (Field 3), but the problem is I'm not familiar with ArcPy at all.

It would be great if you help me out with ArcPy or even point the sample code I can look at.

Thanks!

AK

Field 1Field 2Field 3
111
122
133
144
251
262
371
382
393
3104
4 Replies
MVP Honored Contributor

If you post the original code you used for Field 2, we can go from there.

MVP Emeritus

is that the limit of the examples? does the example define all the rules?

• field 1, 4x, 2x, 4x with integer sequence
• field 2 sequence from 1-19 based on sequence in the previous
• field3  1,2,3,4  1,2   1,2,3,4 to match the sequencing in field 1

so the next sequence would be

field 1    4 4 4 4 5 5 6 6 6 6

field 2     1 2 3 4 5 6 7 8 9 10

field 3   1 2 3 4 1 2 1 2 3 4

just to check there are no hidden rules or exceptions

New Contributor

Hi Darren,

This is the code I used for filling the Field 2.  (I have ArcGIS 10.3.1 by the way)

Pre-Logic Script Code:

rec=0

def autoIncrement():

global rec

pStart = 1

pInterval = 1

if (rec == 0):

rec = pStart

else:

rec += pInterval

return rec

Expression:

autoIncrement()

I have a vague idea of having double loop of entering sequential number to Field 3 as number changes in Field 1.

rec=0

field1 = 0

def autoIncrement():

global rec

global field 1

LOOP1 field1 +=1

LOOP2 rec += 1

END LOOP2

return rec

END LOOP1

I appreciate your help!

MVP Honored Contributor

Here's kind of a simple/complex way to do it:

dict = {} # make a dictionary
def myFunc(myClass): # this is the function
global dict # specify global
dict[myClass] = dict.get(myClass, 0) + 1 # if the dictionary key for the value exists, add 1 to it. If not, make it 0.
return dict[myClass] # return the value for that key

expression: myFunc(!Field_1!)

edit: I had a variable named 'class', which may be a reserved word.