2

An attributes table has 3 fields: ID, Field1, and Field2 and looks something like this:

ID | Field1 | Field2
1. | text......| 10
2. | text......| NULL
3. | text2....| NULL
4. | text2....| 20
5. | text2....| NULL

In this table there is only 1 value in Field2 for each value of Field1, the rest are all NULL.

And using python in the field calculator in ArcMap I want to calculate the NULL values so that the values in Field2 are the same across all equal values of Field1 so the resulting attribute table looks like:

ID | Field1 | Field2
1. | text......| 10
2. | text......| 10
3. | text2....| 20
4. | text2....| 20
5. | text2....| 20

This is what I can come up with but it will not change the NULL values to what it's reading from the populated row. What I'm trying to have it do is read the populated Field2 value (as x) for a specific Field1 value then overwrite that and all the other Field2 values that have the same corresponding Field1 value with x.

Pre-Logic Script:

def Calc( field1 , field2 ):
 if field1 == "text" and field2 >= 0:
 x = field2
 else:
 x = None
 return x

Field2=

Calc( !Field1! , !Field2! )
PolyGeo
65.5k29 gold badges115 silver badges350 bronze badges
asked Mar 4, 2017 at 4:37
1
  • Welcome to GIS SE! As a new user please take the tour to learn about our focused Q&A format. Commented Mar 4, 2017 at 4:41

1 Answer 1

3

Something like this should work - Finds all the values in Field1 and Field2 and stores them in a dictionary, then looks up that dictionary for the values to calculate the field.

You will need to update "Field1" and "Field2" in the cursor with your actual field names, and "MyFC" with the name of your layer.

Pre-Logic Script:

myDict = {}
with arcpy.da.SearchCursor("MyFC", ["Field1", "Field2"]) as cursor:
 for row in cursor:
 if row[1] and row[0] not in myDict:
 myDict[row[0]] = row[1]
def Calc( field1 , field2 ):
 global myDict
 if not field2:
 x = myDict[field1]
 else:
 x = field2
 return x

Field2=

Calc( !Field1! , !Field2! )
answered Mar 4, 2017 at 4:57
1
  • I like scripting, but it can be easily done without it. Create layer from original with definition query Is Not Null. Join it to original using 1st field and apply field calculator Commented Mar 4, 2017 at 9:01

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.