أكثر

ابحث عن الحد الأدنى في عمود جدول البيانات باستخدام python في Field Calculator

ابحث عن الحد الأدنى في عمود جدول البيانات باستخدام python في Field Calculator


لدي عمود X في جدول السمات حيث تتكرر القيم في بعض الأسطر. ما أحتاجه هو وضع شرط يقول: عندما تكون القيم الموجودة في العمود X هي نفسها ، ابحث عن الحد الأدنى للعمود Y واكتبه في عمود جديد.

جدول السمات الخاص بي يشبه هذا:

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

def func (code، w، ataq): Y = w * ataq if X == 0: إرجاع 0 else: if X == X + 1: m = min (Y) elif Y == m: return Y else: return 0

المشكلة في زيادة X. كيف يمكنني القيام بذلك بشكل مختلف؟

تحديث الآن أحاول هذا الكود في نافذة بيثون:

استيراد arcpy featureClass = "C:  Users  andreia.medeiros  Documents  ArcGIS  Trabalho  Modelo  linhas_150_5km.shp" data = arcpy.SearchCursor ("linhas_150_5km"، ""، ""، " Line_code؛ w_min؛ ang_ataque "،" Line_code؛ w_min؛ ang_ataque ") مجموعات الاستيراد d = Collections.defaultdict (list) for Line_code، w_min، ang_ataque in data: d [Line_code].

لكن هناك خطأ ما في "البيانات". عندما أطبع "البيانات" ، فإنها تُظهر "كائن كائن مؤشر المعالجة الجغرافية عند 0x1DAED2A0" ولدي خطأ في النوع: كائن "الصف" غير قابل للتكرار

أي مساعدة لمعرفة ما هو الخطأ هنا؟


معالمجموعات، هذه مهمة مباشرة. لنفترض أن هذا هو جدول سمات arcmap الخاص بنا. لا يهم إذاx_fieldمتسلسل أو بأي نوع من الترتيب. لقد أشرت إلى القيم الدنيا للسهولة:

ج 51 هـ 75 هـ 27 <---- ج 28 <---- ب 35 ج 94 د 89 ج 68 أ 25 <---- ب 8 <---- أ 60 أ 34 هـ 92 أ 54 د 76 <----

كما أشارwork21 ، يمكنك استخدام المؤشرات لقراءة هذه البيانات في قائمة قوائم Python:

data = [row for row in arcpy.da.SearchCursor (FC، [x_field، y_field])] # لهذا المثال ... data = [['C'، 51]، ['E'، 75]، ['E' ، 27]، ['C'، 28]، ['B'، 35]، ['C'، 94]، ['D'، 89]، ['C'، 68]، ['A'، 25 ]، ['B'، 8]، ['A'، 60]، ['A'، 34]، ['E'، 92]، ['A'، 54]، ['D'، 76]]

من هنا ، سننشئ قاموسًا لكل قيمة فريدة فيx_field(هذا في الواقع مثال من مستندات المساعدة:

استيراد مجموعات ddict = collections.defaultdict (قائمة) لـ x، y في البيانات: ddict [x] .append (y) # ddict.items () يعرض [('A'، [25، 60، 34، 54]) ، ('C'، [51، 28، 94، 68])، ('B'، [35، 8])، ('E'، [75، 27، 92])، ('D'، [89، 76])]

أصبح الحصول على الحد الأدنى من القيم أمرًا بسيطًا الآن:

minvals = ديكت ((مفتاح ، min (ddict [مفتاح])) للمفتاح في ddict.keys ()) #minvals يعرض {'A': 25، 'C': 28، 'B': 8، 'E': 27 ، "د": 76}

يمكنك بعد ذلك استخدام مؤشر التحديث لكتابة القيم الجديدة مرة أخرى إلى جدول السماتz_field:

باستخدام arcpy.da.UpdateCursor (FC [x_field، z_field]) كصفوف: للصف في الصفوف: row [1] = minvals [row [0]]

أود أن أقترح القيام بذلك في برنامج Arcpy / Python النصي ، وليس في آلة حاسبة. سيذهب تدفق الشفرة إلى شيء مثل هذا:

  1. استخدم مؤشر البحث للتكرار خلال الجدول
  2. تخزين قيمة الحقل x الحالية في متغير
  3. ضمن مؤشر البحث ، استخدم تحديد طبقة بالسمة في حقل x / متغير # 2
  4. بعد ذلك ، قم بإنشاء متغير قائمة وأضف جميع قيم y المحددة إليه
  5. استخدم طريقة min في القائمة واكتب القيمة إلى متغير جديد
  6. قم بتضمين مؤشر تحديث آخر بعد الخطوة 5 داخل مؤشر البحث واستخدم المنطق الشرطي للعثور على السجل الذي يساوي الخطوة / المتغير رقم 2 ورقم 5 وتحديث قيمة الحقل z

المنطقة الوحيدة التي لست متأكدًا منها هي كيف تخطط للعثور على MIN لقيم حقل y المحددة ، فهل من المفترض أن تكون تلك الفواصل عبارة عن فترات؟


شاهد الفيديو: البحث عن البيانات فى اى عمود من الجدول اوتوماتيكيا واظهار النتائج تلقائيا وتلوينهاExcel for you