Topics in this subject
Pandas 1 min read Updated 4 Aug 2026

Project 3 — Employee Salary Analysis

emp = pd.DataFrame({

emp = pd.DataFrame({
    'dept':   ['Eng','Eng','Eng','Sales','Sales','HR'],
    'level':  ['Jr','Sr','Sr','Jr','Sr','Sr'],
    'salary': [70,120,110,50,80,90]})

# Salary z-score WITHIN each department (transform keeps row count)
emp['salary_z'] = emp.groupby('dept')['salary'].transform(
    lambda s: (s - s.mean()) / s.std(ddof=0))

# Departments whose average salary exceeds 80k
emp.groupby('dept').filter(lambda g: g['salary'].mean() > 80)

# Highest paid per department
emp.loc[emp.groupby('dept')['salary'].idxmax()]

Key technique: transform for per-group features; idxmax inside a groupby to fetch the top row per group.