تجمیع و گروهبندی داده
گروهبندی داده با groupby، توابع تجمیع (sum، mean، count)، جدول محوری (pivot_table) و پاسخ به سؤالات تحلیلی
تجمیع داده چیست؟
معمولاً سؤالهای تحلیلی به ازای «گروه» هستند: «فروش هر شهر چقدر بوده؟»، «میانگین سبد خرید هر دسته مشتری چیست؟». تجمیع (Aggregation) یعنی: داده را گروهبندی کن و برای هر گروه یک آمار (مجموع، میانگین، تعداد...) محاسبه کن.
الگوی سهمرحلهای groupby
df.groupby("city")["sales"].sum()
- Split: داده بر اساس ستون city به گروهها تقسیم میشود
- Apply: تابع (مثلاً sum) روی هر گروه اعمال میشود
- Combine: نتایج در یک جدول جدید جمع میشوند
توابع تجمیع پرکاربرد
| تابع | خروجی | مثال کاربرد |
|---|---|---|
| sum | مجموع | فروش کل هر شهر |
| mean | میانگین | میانگین سبد خرید |
| count | تعداد | تعداد سفارش هر مشتری |
| min / max | کمینه/بیشینه | بیشترین فروش روزانه |
| median | میانه | میانه حقوق هر دپارتمان |
| nunique | تعداد مقادیر یکتا | تعداد مشتریان یکتای هر شهر |
گروهبندی چندسطحی
میتوان بر اساس چند ستون گروهبندی کرد:
# فروش هر شهر در هر ماه
df.groupby(["city", "month"])["sales"].sum()
چند تجمیع همزمان: agg
df.groupby("city")["sales"].agg(["sum", "mean", "count"])
حتی میتوان برای هر ستون، توابع متفاوت خواست:
df.groupby("city").agg({
"sales": "sum",
"price": "mean",
"customer": "nunique"
})
جدول محوری (Pivot Table)
پیوت تیبل، نتیجه گروهبندی را به شکل جدول متقاطع (مثل اکسل) میچیند:
# سطر: شهر، ستون: ماه، مقدار: مجموع فروش
pd.pivot_table(df, values="sales", index="city", columns="month", aggfunc="sum")
این شکل برای مقایسه بصری گروهها عالی است.
مرتبسازی نتیجه
معمولاً بعد از تجمیع، میخواهیم برترینها را ببینیم:
result = df.groupby("city")["sales"].sum()
top = result.sort_values(ascending=False)
top3 = top.head(3) # سه شهر برتر
نکته: اگر بعد از groupby ستونی ناپدید شد، یادتان باشد index عوض شده! با
.reset_index() نتیجه را به DataFrame معمولی برگردانید.جمعبندی
- تجمیع = Split + Apply + Combine
- groupby ابزار اصلی پاسخ به سؤالهای «به ازای هر گروه» است
- agg برای چند آمار همزمان و pivot_table برای جدول متقاطع
- بعد از تجمیع، sort_values برترینها را نشان میدهد
این مبحث بخشی از دوره آموزش کامل علم داده است.