GroupBy في بايثون

تعلم كيفية تحليل البيانات بشكل فعال باستخدام pandas وطرق مثل aggregate()، filter()، transform()، و apply().

ابدأ التعلم

مقدمة

الكائن GroupBy في pandas هو أداة قوية لتجميع وتحليل البيانات. باستخدام طرق مثل aggregate()، filter()، transform()، و apply()، يمكنك إجراء العمليات على مجموعات بياناتك بكفاءة.

aggregate()

طريقة aggregate() تطبق دوال التجميع مثل sum، mean، أو count على مجموعات البيانات.

مثال من العالم الحقيقي: حساب إجمالي ومتوسط المبيعات حسب الفئة.


      import pandas as pd
      
      # بيانات المبيعات
      data = {'Category': ['إلكترونيات', 'ملابس', 'إلكترونيات', 'ملابس'],
              'Sales': [1500, 1200, 1700, 800]}
      
      df = pd.DataFrame(data)
      
      # التجميع حسب الفئة
      grouped = df.groupby('Category')
      result = grouped.aggregate(['sum', 'mean'])
      
      print(result)
          

الناتج:

            Sales
            sum   mean
            Category                    
            ملابس      2000  1000.0
            إلكترونيات   3200  1600.0
          

اقرأ المزيد

filter()

استخدم filter() لتضمين أو استبعاد المجموعات بناءً على شرط.

مثال من العالم الحقيقي: عرض الفئات التي تتجاوز مبيعاتها الإجمالية 2500.


      # تصفية الفئات التي تتجاوز مبيعاتها 2500
      filtered = grouped.filter(lambda x: x['Sales'].sum() > 2500)
      print(filtered)
      
          

الناتج:

      Category       Sales
      إلكترونيات    1500
      إلكترونيات    1700
          

اقرأ المزيد

transform()

تطبق طريقة transform() دالة على كل مجموعة وتعيد DataFrame بنفس الشكل الأصلي.

مثال من العالم الحقيقي: حساب نسبة كل عملية بيع من إجمالي المبيعات في فئتها.


      # حساب نسبة المبيعات
      df['Percent'] = grouped['Sales'].transform(lambda x: x / x.sum() * 100)
      print(df)
    
      

الناتج:

      Category       Sales      Percent
      إلكترونيات    1500       46.88
      إلكترونيات    1700       53.12
      ملابس       1200       60.00
      ملابس        800       40.00
          

اقرأ المزيد

apply()

تطبق طريقة apply() دالة مخصصة على كل مجموعة وتعيد النتيجة.

مثال من العالم الحقيقي: العثور على أكبر فرق مبيعات داخل كل فئة.


      # حساب أكبر فرق مبيعات في كل فئة
      result = grouped.apply(lambda x: x['Sales'].max() - x['Sales'].min())
      print(result)
      
          

الناتج:

      Category
      ملابس          400
      إلكترونيات     200
      

اقرأ المزيد

الميزة تجميع (aggregate()) تصفية (filter()) تحويل (transform()) تطبيق (apply())
الغرض منها إجراء عمليات إحصائية مثل الجمع، المتوسط، الحد الأدنى أو الأقصى على المجموعات. اختيار المجموعات التي تحقق شرطًا معينًا وإزالة غير المطابقة. تعديل البيانات داخل كل مجموعة مع الاحتفاظ بعدد الصفوف كما هو. تطبيق دالة مخصصة على مستوى الصفوف أو الأعمدة.
الاستخدام الشائع حساب الإجمالي، المتوسط، أو القيم القصوى لكل مجموعة. الاحتفاظ فقط بالمجموعات التي يتجاوز مجموع قيمها حدًا معينًا. تطبيع القيم أو حساب النسب المئوية داخل كل مجموعة. تنفيذ عمليات مخصصة، مثل تحويل النصوص أو إجراء حسابات معقدة.
ما تُرجعه الدالة قيمة واحدة أو جدول جديد حسب الوظائف المستخدمة. جزء من البيانات الأصلية بناءً على الشرط. بيانات بنفس عدد الصفوف الأصلي. يمكن أن تُرجع أي نوع من البيانات (رقم، نص، جدول...).
هل تحافظ على نفس عدد الصفوف؟ لا، يتم تقليل الأبعاد. لا، يتم حذف الصفوف غير المطابقة. نعم، تبقى نفس عدد الصفوف. يمكن أن يتغير الشكل حسب الدالة المستخدمة.
تُستخدم مع groupby؟ نعم نعم نعم نعم
سلوك الدالة تُرجع قيمة موجزة لكل مجموعة. تُعيد True للمجموعات التي يجب الاحتفاظ بها وFalse للباقي. تُطبق العملية على كل عنصر داخل المجموعة دون تغيير العدد. يمكن أن تُنفذ أي عملية على الصفوف أو الأعمدة.
مثال على الاستخدام df.groupby('Category').agg({'Sales': ['sum', 'mean']}) df.groupby('Category').filter(lambda x: x['Sales'].sum() > 1000) df.groupby('Category')['Sales'].transform(lambda x: x / x.mean()) df.apply(lambda row: row['Sales'] * 2, axis=1)
الأداء سريع عند استخدام الدوال المدمجة. فعال ولكن يمكن أن يكون بطيئًا عند التعامل مع شروط معقدة. أسرع من apply() عند العمل على مستوى العنصر. يمكن أن يكون بطيئًا جدًا إذا لم يُستخدم بكفاءة.
يدعم استخدام وظائف متعددة؟ نعم لا لا نعم
هل تحتفظ بتجميع البيانات؟ لا لا نعم لا

اختبر فهمك باستخدام البطاقات التعليمية