2017-10-12 35 views
0

我有一張包含大約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

回答

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

在這一點上,你就可以開始去翻翻字典,找到重複的,比較的屬性,和確定要保留什麼和丟棄什麼。

+0

我認爲我的主要問題是可能有超過2個重複。可能有4個相同的記錄有不同的時間 - >分鐘,我需要根據時間上的最小差異進行查詢和合並,我真的認爲熊貓會最好的工作,我從來沒有用過任何複雜的東西 – KRL

+0

一旦你使用SearchCursor獲得了字典,它應該能夠進入熊貓。這超出了我的專業領域,但:) – Erica