Saya mencari rekaman duplikat dalam file dbf berdasarkan atribut yang disebut 'ID'. Saya memiliki berbagai file dbf dari 500.000 catatan hingga 1,5 juta dan saya tahu ada sejumlah duplikat.
Saya ingin menambahkan bidang 'Duplikat' yang bertuliskan Ya atau Tidak (atau 1 atau 0 baik-baik saja) ketika atribut ID ada di tempat lain. Menggunakan skrip python berikut dalam Field Calculator menghasilkan 1 untuk entri duplikat dan 0 untuk entri unik;
uniqueList = []
def isDuplicate(inValue):
if inValue in uniqueList:
return 1
else:
uniqueList.append(inValue)
return 0
isDuplicate(!FIELD_NAME!)
Namun, catatan pertama, misalnya, 5 ID duplikat juga akan dikembalikan sebagai 0 (4 berikutnya dianggap duplikat). Saya perlu semua 5 ditandai sebagai duplikat karena ID ada di tempat lain.
Menggunakan kode berikut akan memberi Anda penghitungan tambahan berapa kali ID terjadi dengan 1 yang berarti kejadian pertama dan seterusnya;
UniqueDict = {}
def isDuplicateIndex(inValue):
UniqueDict.setdefault(inValue,0)
UniqueDict[inValue] += 1
return UniqueDict[inValue]
isDuplicateIndex( !YOUR_FIELD! )
Saya hanya ingin 1 (atau Ya) jika ID dari catatan itu ada di tempat lain! (ArcGIS versi 10.1)
Saya telah melihat jawaban lain seperti skrip Python untuk mengidentifikasi catatan duplikat (tindak lanjut) tetapi tidak cukup berhasil.
Solusi alternatif lain ( hanya bekerja dengan lingkungan SDE ) adalah dengan menggunakan fungsionalitas SQL yang ada di ArcGIS untuk menunjukkan rekaman duplikat
Dapatkan Duplikat Catatan di Tabel (Pilih berdasarkan Atribut)
Contoh:
sumber
HAVING COUNT(*) > 1
. Saya benar-benar tidak melihat cara untuk membuatnya berfungsi di file geodatabases. Saya tahu artikel teknologi ini agak tanggal, tetapi tampaknya menjadi sumber pernyataan SQL Anda dan ini menunjukkan bahwa itu tidak berfungsi di file geodatabases. Saya siap memvotasikan jawaban Anda jika saya dapat membuatnya berfungsi dalam file gdb, atau klarifikasi ditambahkan untuk menunjukkan bahwa mereka adalah pengecualian.Script berikut membuat bidang baru dengan jumlah kemunculan setiap nilai dari bidang yang ditentukan. Jadi, misalnya, jika Anda memiliki "Paris" 6 kali di bidang itu, setiap baris dengan "Paris" akan mendapatkan 6.
Ini dapat dengan mudah dimodifikasi sehingga Anda dapat memiliki "Ya" atau 1 jika hitung> 1, tetapi saya rasa memiliki nomor hitung yang sebenarnya lebih bermanfaat.
Edit Nanti: Atau Anda bisa menggunakan ini di kalkulator lapangan. Kode skrip Pra-Logika:
bidang duplikat =
sumber