我有一张约有3500条记录的表格。
我正在尝试循环并根据我创建的名为UNIQUEID的字段查找重复项,该字段可能是每条记录的2,3,4。我的最终目标是合并具有相同UNIQUEID值但RTYPE值不同的记录
OID UNIQUEID RTYPE TIME OTHER
1 ABC_20170215 SENT 12:30 item1
2 ABC_20170215 RECEIVED 12:29
3 ABC_20170215 SENT 12:35 item4
现在,当我找到我的副本时,我想检查RTYPE,如果RTYPE不同,那么做数学计算出哪一个最接近时间并合并这两个。
所以我的最终目标,在上表中,记录1和2将被合并,我不关心像RTYPE或TIME这样的列,但如果有数据,我想保留像OTHER这样的列。
所以这是我到目前为止寻找重复的代码,我认为它给了我一些倍数问题。
###set up cursors
cursor1 = arcpy.da.SearchCursor(shp, ["UNIQUEID", "RTYPE"])
cursor2 = arcpy.da.SearchCursor(shp, ["UNIQUEID", "RTYPE"])
count = 0
#make a dictionary and store values from my table
idUnique = {}
for row in cursor1:
idUnique[row[0]] = row[0]
idUnique[row[1]] = row[1]
#loop through other table
for row in cursor2:
if row[0] == idUnique[row[0]]:
print "Row 1 {}".format(row[0]) + " --{}".format(row[1])
print "ID Row 1 {}".format(idUnique[row[0]]) + " --{}".format(idUnique[row[1]])
任何帮助都会很棒!
我的预期输出是
OID UNIQUEID RTYPE TIME OTHER
1 ABC_20170215 <whatever> <whatever> item1
3 ABC_20170215 <whatever> <whatever> item4
答案 0 :(得分:0)
我建议只创建一个光标,以便将数据放入字典中,然后从那里开始操作数据。因为你必须创建一个字典无论如何来存储下一个循环的信息,所以不妨只使用字典。 (只有当您要在不同的要素类中循环时,我才推荐第二个游标。)
unique_ids = []
all_data = {}
cursor = arcpy.da.SearchCursor(shp, ["FID", "UNIQUEID", "RTYPE", "TIME", "OTHER"])
for row in cursor:
if row[1] not in unique_ids:
unique_ids.append(row[1])
all_data[row[0]] = {
"uniqueid": row[1],
"rtype": row[2],
"time": row[3],
"other": row[4]
}
此时,您可以开始浏览字典以查找重复项,比较属性,并确定要保留的内容和要丢弃的内容。