Python可以根据时间查找重复数据和合并数据

Python可以根据时间查找重复数据和合并数据

问题描述:

我有一张包含大约3500条记录的表格。Python可以根据时间查找重复数据和合并数据

我想循环查找基于我创建的字段名称UNIQUEID,可能是每个记录2,3,4的重复项。我的最终目标是要合并具有相同UNIQUEID值的记录,但不同的舍入类型值

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 

现在,当我发现我的重复,我想检查舍入类型,如果舍入类型是不同的,然后做数学题,找出哪些一个是最接近的时间并合并这两个。

所以我最终的目标,在上面的表中,记录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

你能显示预期的输出吗? – akilat90

+1

可能是'df.groupby()'会帮助! – ileadall42

+0

你得到了什么错误或不正确的输出? – Erica

我建议创建只有一个光标,为了让您的数据转换成字典,然后就从那里操纵数据的工作。既然你必须做一本字典来存储下一个循环的信息,不妨使用字典。 (我建议只有在你通过不同的要素类将环的第二光标。)

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

在这一点上,你就可以开始去翻翻字典,找到重复的,比较的属性,和确定要保留什么和丢弃什么。

+0

我认为我的主要问题是可能有超过2个重复。可能有4个相同的记录有不同的时间 - >分钟,我需要根据时间上的最小差异进行查询和合并,我真的认为熊猫会最好的工作,我从来没有用过任何复杂的东西 – KRL

+0

一旦你使用SearchCursor获得了字典,它应该能够进入熊猫。这超出了我的专业领域,但:) – Erica