Szukam zduplikowanych rekordów w plikach dbf na podstawie atrybutu o nazwie „ID”. Mam różne pliki dbf od 500 000 rekordów do 1,5 miliona i wiem, że istnieje wiele duplikatów.
Chciałbym dodać pole „Duplikuj”, które mówi Tak lub Nie (lub 1 lub 0 jest w porządku), gdy atrybut ID jest obecny gdzie indziej. Użycie następującego skryptu python w Kalkulatorze pola zwraca 1 dla zduplikowanego wpisu i 0 dla unikalnego wpisu;
uniqueList = []
def isDuplicate(inValue):
if inValue in uniqueList:
return 1
else:
uniqueList.append(inValue)
return 0
isDuplicate(!FIELD_NAME!)
Jednak pierwszy rekord, na przykład 5 duplikatów identyfikatorów, zostanie również zwrócony jako 0 (kolejne 4 są uważane za duplikaty). Potrzebowałbym wszystkich 5, aby oznaczyć je jako duplikaty, ponieważ identyfikator istnieje gdzie indziej.
Użycie następującego kodu da ci przyrostową liczbę, jak często występuje ten identyfikator, przy czym 1 oznacza pierwszą okazję i tak dalej;
UniqueDict = {}
def isDuplicateIndex(inValue):
UniqueDict.setdefault(inValue,0)
UniqueDict[inValue] += 1
return UniqueDict[inValue]
isDuplicateIndex( !YOUR_FIELD! )
Chcę tylko 1 (lub Tak), jeśli identyfikator tego rekordu istnieje gdzie indziej! (ArcGIS wersja 10.1)
Widziałem inne odpowiedzi, takie jak skrypt Pythona do identyfikowania zduplikowanych rekordów (kontynuacja), ale to nie do końca działa.
Innym alternatywnym rozwiązaniem ( działa tylko w środowiskach SDE ) jest użycie istniejącej funkcjonalności SQL w ArcGIS do wyświetlenia duplikatów rekordów
Uzyskaj zduplikowane rekordy w tabeli (wybierz według atrybutu)
Przykład:
źródło
HAVING COUNT(*) > 1
. Naprawdę nie widzę sposobu na uruchomienie go w geobazach plików . Wiem, że ten artykuł techniczny jest nieco przestarzały, ale wydaje się, że jest on źródłem Twojej instrukcji SQL i wskazuje, że nie działa on w geobazach plików. Jestem gotów głosować za odpowiedzią, jeśli mogę sprawić, by działała w pliku gdbs lub dodam wyjaśnienie wskazujące, że są wyjątkiem.Poniższy skrypt tworzy nowe pole z liczbą wystąpień każdej wartości z określonego pola. Na przykład, jeśli masz 6 „Paris” w tym polu, każdy wiersz z „Paris” otrzyma 6.
Można go łatwo zmodyfikować, aby można było wybrać „Tak” lub 1, jeśli liczba> 1, ale wydaje mi się, że posiadanie rzeczywistej liczby jest bardziej przydatne.
Późniejsza edycja: Lub możesz użyć tego w kalkulatorze polowym. Kod skryptu przedlogicznego:
zduplikowane pole =
źródło