تقنية

تضاعف الصفوف بعد دمج جدولين: كيف ينتج صفان وثلاثة ست نتائج؟

حزمتان وثلاث مهمات افتراضية تشتركان في نمط واحد فتنتجان ست تركيبات عند ربط كل حزمة بكل مهمة
رسم أصلي لعدد الاقترانات في المثال؛ لا يمثل مخزونا أو تخصيصا فعليا.

تضاعف الصفوف بعد دمج جدولين قد ينتج من تكرار المفتاح في الجانبين. تشرح pandas أن الربط متعدد إلى متعدد ينتج تركيبات الصفوف المرتبطة بالمفتاح نفسه. لذلك قد يزيد الناتج دون جمع بيانات جديدة. [1]

الخلاصة السريعة

عد المطابقات لكل مفتاح في كلا الجدولين، وحدد هل تريد كل التركيبات فعلا. الصف الناتج يمثل اقتران سجلين؛ لا يفترض أنه شيء أو حدث جديد، ولا تجمع قيمة أصلية مكررة دون فهمها.

  • تكرار المفتاح في الجانبين قد يولد كل اقترانات الصفوف التابعة له، حسب الربط المختار. [1]
  • في المثال، حزمتان وثلاث مهمات تحت مفتاح واحد تنتجان ست تركيبات إذا ربطنا كل حزمة بكل مهمة.
  • تكرار كميتي 4 و7 ثلاث مرات يجعل المجموع 33، لكنه لا يزيد عدد القطع الأصلية البالغ 11 في مثالنا.
  • راجع المفاتيح ونوع الربط والمفقود ووحدة الناتج؛ pandas قد يطابق مفاتيح null ببعضها، بخلاف سلوك SQL المعتاد. [2]

لماذا لا يكون لكل سجل تطابق واحد؟

في الربط متعدد إلى متعدد، ينشأ حاصل تركيبات الصفوف ذات المفتاح المتكرر في الجدولين. [1]

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

كيف تظهر ست تركيبات في مثال صغير؟

نفترض حزمتين للنمط س: ح1 فيها 4 قطع، وح2 فيها 7. وجدول المهمات يحتوي م1 وم2 وم3 للنمط نفسه. إذا طلبنا كل اقتران مطابق لهذا المفتاح، نقترح الناتج التالي. لم نشغل pandas أو نسند ورقا إلى مهمات حقيقية.

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

الحزمةالمهمةكمية الحزمة للسياق
ح1م14
ح1م24
ح1م34
ح2م17
ح2م27
ح2م37

لماذا يعطي جمع الكمية معنى خاطئا هنا؟

جدول الحزم الأصلي يصف 4 و7 قطع، أي 11 إجمالا في المثال. بعد الربط تكررت كل كمية في ثلاثة اقترانات؛ جمع العمود يعطي 12 و21، ثم 33. لم نضف قطعا؛ اخترنا تجميعا يعيد عد الكمية للسياق.

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

ما الذي نفحصه قبل الاعتماد على الناتج؟

تنبه pandas إلى مطابقة مفاتيح null بعضها ببعض في merge، بخلاف سلوك الربط المعتاد في SQL. [2]

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

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

المصادر ومتابعة القراءة

  1. pandas: Merge, join, concatenate and compare (يفتح في نافذة جديدة)pandas.pydata.org
  2. pandas: merge (يفتح في نافذة جديدة)pandas.pydata.org

أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.