Daha çox

Şərti şərtlərlə istifadə üçün atribut cədvəllərinin dəyərlərini qruplaşdırın - Python

Şərti şərtlərlə istifadə üçün atribut cədvəllərinin dəyərlərini qruplaşdırın - Python


Atribut cədvəlindəki bir sahədəki dəyərləri qruplaşdırmaq istəyirəm. Sahədə təkrarlanan dəyərlər var. Bu təkrarlanan dəyərlər təkrarlanan dəyərlərə əsasən qruplaşdırılmalıdır, sahə aşağıdakı təsadüfi 'Sahə' kimi bir şeyə bənzəyir:

Sahə Tarixi Bayraqlı_Field X 1/1/2014 X 1/1/2013 X 1/1/2015 YY 1/1/2000 Y 1/1/2008 YZ 1/1/1999 Z 1/1/1998 Z 1/1 / 1992 Z 1/1/2003 Y

Təkrarlanan qeydlər olan X, Y və Z dəyərləri daha sonra qruplaşdırılır. İdeal olaraq, elif və başqa sahələr üçün X dəyəri olan bir qrupdakı digər sahələri müqayisə etmək üçün istifadə etməyə davam etmək istərdim və bir dəfə qrupa keçdikdən sonra Y və son olaraq Z dəyərini alırdım.

Budur məndə:

cursor = arcpy.SearchCursor (fc) row = cursor.next () cursor in row: rowField = (row.getValue ("Field")) listC = ([list (j) i, j for groupby (rowField)) ) listC qrupları üçün: print str (qruplar)

Nə olur ki, sahədəki hər bir məktub üçün unikod siyahısını alıram. Yalnız bir sahədəki simvollardan fərqli olaraq bir-birinə qarşı sahə dəyərlərini müqayisə edə bilsəm, bununla ehtiyacım olan şeyə yaxınlaşa biləcəyimə inanıram.

Atributlara, xüsusən də bir sahəyə əsaslanan bütün dəyərləri toplamağa çalışıram. Bundan sonra bu kimi dəyərlərdən istifadə edərək məlumatların digər xüsusiyyətlərini müqayisə etmək istərdim. Məsələn bir tarix sahəm var ki, yuxarıdakı nümunəmdə göstərilən Sahədəki kimi dəyərlərə əsaslanaraq ən son tarixi əks etdirən qeydləri qeyd etmək istəyirəm, yuxarıdakı düzəlişlərə baxın.


Düşünürəm ki, nə etmək istədiyinizi başa düşürəm. "Sahədəki" hər bir unikal dəyər üçün "Tarix" də ən son tarixi tapmaq və "Bayraqlı_Field" də "Y" dəyərini təyin etmək istəyirsiniz.
Sahə adlandırma konvensiyalarından istifadə etdim, ancaq sahə adlarınız üçün Sahə və Tarix kimi açar sözlərdən istifadə etməməlisiniz.

import itertools def getGrouper (sıra): "" "Sahə dəyərini almaq üçün açar funksiya." "" qayıdış sırasını necə qruplaşdırdığınıza görə dəyişin. [0] def getDate (sıra): "" "Tarix dəyərini almaq üçün açar funksiya. "" "qayıtma satırının altındakı Xəritəçəkmə funksiyası [1] def mostRecentDate (group):" "" Ən son tarixə sahib olan hər bir qrupda satır almaq üçün Xəritəçəkmə funksiyası "" "qayıtma max (group, key = getDate) # skript gövdəsinə sərt kodlamadan qaçın fc = "YourFeatureClass" # Sütun sırası vacibdir, buna görə də kursor tərifləri xaricindəki sahə adlarını təyin edin = ["Sahə", "Tarix", "Bayraqlı_Field"] # həmçinin işarələnmiş sahənin indeksini qoymaq burada, hardcoding əvəzinə flagindex = 2 # qrupları sonrakı əməliyyatlar qrupları üçün qruplaşdırılmış qeydləri saxlamaq üçün istifadə olunur = [] # Axtarış imlecini arcpy.da.SearchCursor (fc, field) ilə kursor kimi təyin edin: # qruplaşdırmaq üçün itertools.groupby istifadə edin. Field və sonra nəticələri itertools.groupby (kursor, getGrouper) içindəki k, g qruplarına əlavə edin: # Düymə ilə heç bir şey etmirəm, çünki yalnız qruplar haqqında qruplaşdırdıqları ilə deyil, qruplar haqqında yenidən məlumat verin. (siyahı (g)) # Bu nöqtədə qruplarınız var # Qalan ən son tarix # xəritə qruplarını ən son qeyd etmək üçün nümunə etməkdir hər qrup flaggedrecords = xəritə (mostRecentDate, qruplar) # arcpy.da.UpdateCursor (fc, sahələr) ilə qeydləri yeniləmə: kursor sırası üçün: # Yeniləmə sətrini düzəltmək çox vacibdir, əks halda uyğun gəlməyəcəksiniz bayraqlı qeydlərdə tople (sıra): # Bayraqlı qeydlərdə varsa, bayraq sətrini təyin edin [flagindex] = 'Y' else: # Başqa, bayraq sətrini açın [flagindex] = "cursor.updateRow (sıra)

Videoya baxın: Alüminiumdan necə lehimlənmək olar? Asanlıqla. Sizə lazım olan bir lehimləmə dəmirdir!