Python根据时间查找重复项并合并数据

时间:2017-10-12 12:24:27

标签: python python-2.7 pandas arcpy

我有一张约有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

1 个答案:

答案 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]
    }

此时,您可以开始浏览字典以查找重复项,比较属性,并确定要保留的内容和要丢弃的内容。