مقدمة
الكائن 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() عند العمل على مستوى العنصر. | يمكن أن يكون بطيئًا جدًا إذا لم يُستخدم بكفاءة. |
يدعم استخدام وظائف متعددة؟ | نعم | لا | لا | نعم |
هل تحتفظ بتجميع البيانات؟ | لا | لا | نعم | لا |