أكثر

تجميع قيم جداول البيانات الجدولية للاستخدام مع الشروط - بايثون

تجميع قيم جداول البيانات الجدولية للاستخدام مع الشروط - بايثون


أرغب في تجميع القيم في حقل في جدول السمات. يحتوي الحقل على قيم مكررة. يجب تجميع هذه القيم المكررة بناءً على قيم مكررة ، سيبدو الحقل مثل "الحقل" التعسفي أدناه:

تاريخ الحقل الذي تم وضع علامة عليه _ الحقل 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

سيتم بعد ذلك تجميع القيم X و Y و Z التي تعد سجلات مكررة. من الناحية المثالية ، أود المضي قدمًا في استخدام if و elif وغير ذلك لمقارنة الحقول الأخرى داخل المجموعة التي تحتوي على القيمة X للحقل وبمجرد الانتهاء ، انتقل إلى المجموعة التي تحتوي على القيمة Y وأخيرًا Z.

هذا ما لدي:

cursor = arcpy.SearchCursor (fc) row = cursor.next () للصف في المؤشر: rowField = (row.getValue ("Field")) listC = ([list (j) for i، j in groupby (rowField)] ) للمجموعات في listC: طباعة str (مجموعات)

ما يحدث هو أنني أحصل على قائمة يونيكود لكل حرف في الحقل. أعتقد أنه إذا كان بإمكاني مقارنة قيم الحقل بطريقة ما مع بعضها البعض على عكس الشخصيات الموجودة في حقل واحد فقط ، يمكنني الاقتراب مما أحتاج إليه بهذا.

أحاول جمع كل القيم المتشابهة بناءً على السمات ، على وجه التحديد حقل واحد. أود بعد ذلك ، باستخدام هذه القيم المتشابهة ، مقارنة السمات الأخرى للبيانات. على سبيل المثال ، لدي حقل تاريخ ، بناءً على القيم المتشابهة في الحقل الموضح في المثال أعلاه ، أود وضع علامة على السجل الذي يحتوي على أحدث تاريخ ، انظر المراجعات أعلاه.


أعتقد أنني أفهم ما تريد القيام به. لكل قيمة فريدة في "الحقل" ، تريد العثور على أحدث تاريخ في "التاريخ" وتعيين قيمته على "Y" في "الحقل الذي تم وضع علامة عليه".
لقد استخدمت اصطلاحات تسمية الحقول الخاصة بك ، ولكن عليك تجنب استخدام كلمات رئيسية مثل الحقل والتاريخ لأسماء الحقول الخاصة بك.

import itertools def getGrouper (row): "" "الوظيفة الأساسية لاسترداد قيمة الحقل. قم بالتغيير بناءً على كيفية تجميع" "" عودة الصف [0] def getDate (row): "" "الوظيفة الأساسية لاسترداد قيمة التاريخ. تستخدم في وظيفة التعيين أدناه "" "عودة الصف [1] def mostRecentDate (مجموعة):" "" وظيفة التعيين لاسترداد الصف في كل مجموعة بأحدث تاريخ "" "إرجاع max (group، key = getDate) # أنا أعرّف هنا حتى تجنب الترميز الثابت في نص البرنامج النصي fc = "YourFeatureClass" # ترتيب العمود مهم ، لذا حدد أسماء الحقول خارج حقول تعريفات المؤشر = ["Field" ، "Date" ، "Flagged_Field"] # أيضًا وضع فهرس الحقل الذي تم وضع علامة عليه هنا ، بدلاً من مؤشر العلم الثابت = 2 # مجموعات تستخدم لتخزين السجلات المجمعة لمجموعات عمليات أخرى = [] # تعيين مؤشر البحث باستخدام arcpy.da.SearchCursor (fc ، الحقول) كمؤشر: # استخدم itertools.groupby للمجموعة عن طريق الحقل ثم قم بإلحاق النتائج بمجموعات من أجل k ، g في itertools.groupby (المؤشر ، getGrouper): # لا أفعل شيئًا بالمفتاح ، k ، نظرًا لأنك تستخدم فقط فيما يتعلق بالمجموعات ، وليس ما جمعته في groups.append (list (g)) # في هذه المرحلة لديك مجموعاتك # والباقي هو القيام بمثالك في وضع علامة على أحدث تاريخ # مجموعات الخرائط إلى أحدث سجل في كل مجموعة flaggedrecords = map (mostRecentDate ، groups) # تحديث السجلات باستخدام arcpy.da.UpdateCursor (fc ، الحقول) كمؤشر: للصف في المؤشر: # من المهم جدًا أن تقوم بترتيب صف التحديث ، وإلا فلن يكون لديك تطابق إذا tuple (row) في السجلات التي تم وضع علامة عليها: # إذا كانت موجودة في السجلات التي تم وضع علامة عليها ، فقم بتعيين صف العلم [flagindex] = 'Y' else: # عدا ذلك ، قم بإلغاء تعيين صف العلم [flagindex] = "cursor.updateRow (صف)

شاهد الفيديو: 09- Python Conditions Part 1. الشروط في بايثون الجزء الاول