قسمت سیزدهم – گروه بندی داده Group Byدر پانداس

در کتابخانه پایتون پانداس، از تابع groupby برای گروه‌بندی داده‌ها بر اساس یک یا چند ستون استفاده می‌شود. groupby می‌تواند برای محاسبه مقادیر آماری مانند میانگین، مجموع، تعداد، و … روی هر گروه به کار رود.

در ادامه چند مثال برای پیاده‌سازی groupby آورده شده است.

فرض کنید یک دیتافریم داریم که اطلاعات مربوط به کارمندان یک شرکت را شامل می‌شود:

import pandas as pd

data = {
    'Name': ['Ali', 'Sara', 'Mehdi', 'Sara', 'Ali', 'Fatemeh'],
    'Department': ['HR', 'IT', 'HR', 'IT', 'Sales', 'IT'],
    'Salary': [4000, 5000, 4500, 5200, 3900, 4900],
    'Age': [25, 30, 24, 28, 26, 27]
}

df = pd.DataFrame(data)
print(df)

      Name Department  Salary  Age
۰      Ali         HR    4000   25
۱     Sara         IT    5000   30
۲    Mehdi         HR    4500   24
۳     Sara         IT    5200   28
۴      Ali      Sales    3900   26
۵  Fatemeh         IT    4900   27
  1. گروه‌بندی و محاسبه‌ی میانگین حقوق بر اساس دپارتمان

برای محاسبه میانگین حقوق هر دپارتمان، می‌توانیم از کد زیر استفاده کنیم:

import pandas as pd

data = {
    'Name': ['Ali', 'Sara', 'Mehdi', 'Sara', 'Ali', 'Fatemeh'],
    'Department': ['HR', 'IT', 'HR', 'IT', 'Sales', 'IT'],
    'Salary': [4000, 5000, 4500, 5200, 3900, 4900],
    'Age': [25, 30, 24, 28, 26, 27]
}

df = pd.DataFrame(data)
average_salary = df.groupby('Department')['Salary'].mean()
print(average_salary)

Department
HR       4250.000000
IT       5033.333333
Sales    3900.000000
Name: Salary, dtype: float64
  1. گروه‌بندی و محاسبه‌ی مجموع حقوق هر دپارتمان
import pandas as pd

data = {
    'Name': ['Ali', 'Sara', 'Mehdi', 'Sara', 'Ali', 'Fatemeh'],
    'Department': ['HR', 'IT', 'HR', 'IT', 'Sales', 'IT'],
    'Salary': [4000, 5000, 4500, 5200, 3900, 4900],
    'Age': [25, 30, 24, 28, 26, 27]
}

df = pd.DataFrame(data)
 
total_salary = df.groupby('Department')['Salary'].sum()
print(total_salary)

 Department
HR        8500
IT       15100
Sales     3900
Name: Salary, dtype: int64

 
  1. محاسبه تعداد افراد در هر دپارتمان

برای شمارش تعداد افراد در هر دپارتمان می‌توان از count استفاده کرد:

import pandas as pd

data = {
    'Name': ['Ali', 'Sara', 'Mehdi', 'Sara', 'Ali', 'Fatemeh'],
    'Department': ['HR', 'IT', 'HR', 'IT', 'Sales', 'IT'],
    'Salary': [4000, 5000, 4500, 5200, 3900, 4900],
    'Age': [25, 30, 24, 28, 26, 27]
}

df = pd.DataFrame(data)
 
employee_count = df.groupby('Department')['Name'].count()
print(employee_count)
Department
HR       2
IT       3
Sales    1
Name: Name, dtype: int64
 

 
  1. گروه‌بندی بر اساس چند ستون و محاسبه‌ی میانگین سن

فرض کنید می‌خواهیم میانگین سن را بر اساس ترکیبی از دپارتمان و نام حساب کنیم:

import pandas as pd

data = {
    'Name': ['Ali', 'Sara', 'Mehdi', 'Sara', 'Ali', 'Fatemeh'],
    'Department': ['HR', 'IT', 'HR', 'IT', 'Sales', 'IT'],
    'Salary': [4000, 5000, 4500, 5200, 3900, 4900],
    'Age': [25, 30, 24, 28, 26, 27]
}

df = pd.DataFrame(data)
 
average_age = df.groupby(['Department', 'Name'])['Age'].mean()
print(average_age)
Department  Name   
HR          Ali        25.0
            Mehdi      24.0
IT          Fatemeh    27.0
            Sara       29.0
Sales       Ali        26.0
Name: Age, dtype: float64

 
  1. استفاده از چندین تابع به طور همزمان

فرض کنید می‌خواهیم همزمان میانگین و مجموع حقوق هر دپارتمان را حساب کنیم:

import pandas as pd

data = {
    'Name': ['Ali', 'Sara', 'Mehdi', 'Sara', 'Ali', 'Fatemeh'],
    'Department': ['HR', 'IT', 'HR', 'IT', 'Sales', 'IT'],
    'Salary': [4000, 5000, 4500, 5200, 3900, 4900],
    'Age': [25, 30, 24, 28, 26, 27]
}

df = pd.DataFrame(data)

salary_stats = df.groupby('Department')['Salary'].agg(['mean', 'sum'])
print(salary_stats)

                   mean    sum
Department                    
HR          4250.000000   8500
IT          5033.333333  15100
Sales       3900.000000   3900
 
  1. فیلتر کردن گروه‌ها بر اساس شرط

اگر بخواهیم فقط گروه‌هایی را نمایش دهیم که میانگین حقوق آن‌ها بالاتر از ۴۵۰۰ است:

 

import pandas as pd

data = {
    'Name': ['Ali', 'Sara', 'Mehdi', 'Sara', 'Ali', 'Fatemeh'],
    'Department': ['HR', 'IT', 'HR', 'IT', 'Sales', 'IT'],
    'Salary': [4000, 5000, 4500, 5200, 3900, 4900],
    'Age': [25, 30, 24, 28, 26, 27]
}

df = pd.DataFrame(data)

high_salary_departments = df.groupby('Department').filter(lambda x: x['Salary'].mean() > 4500)
print(high_salary_departments)

      Name Department  Salary  Age
۱     Sara         IT    5000   30
۳     Sara         IT    5200   28
۵  Fatemeh         IT    4900   27

 

 

 

 

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *