Skip to Content
InterviewPandas 면접 문제집

Pandas 면접 문제집

샘플 3문제전체 25문제

데이터 분석가 코딩 테스트에서 자주 출제되는 Pandas 문제들입니다. 각 문제는 문제 → 정답 → 해설 → 면접 포인트 순서로 구성되어 있습니다.


🟢 샘플 문제 (3/25)

문제 1. 기본 필터링과 정렬

초급
제한시간: 5분

[문제] 다음 조건을 만족하는 데이터를 추출하세요.

  • 카테고리가 ‘Jeans’ 또는 ‘Dresses’
  • 판매가격이 50달러 이상
  • 판매가격 내림차순 정렬
import pandas as pd DATA_PATH = '/data/' order_items = pd.read_csv(DATA_PATH + 'src_order_items.csv') products = pd.read_csv(DATA_PATH + 'src_products.csv') df = order_items.merge(products, on='product_id') # 여기에 코드 작성

✅ 정답 코드

# 방법 1: 불리언 인덱싱 result = df[ (df['category'].isin(['Jeans', 'Dresses'])) & (df['sale_price'] >= 50) ].sort_values('sale_price', ascending=False) # 방법 2: query() 사용 result = df.query( "category in ['Jeans', 'Dresses'] and sale_price >= 50" ).sort_values('sale_price', ascending=False) print(f"결과: {len(result):,}행") print(result[['category', 'sale_price', 'name']].head())

📖 상세 해설

query() vs 불리언 인덱싱:

방법장점단점
불리언 인덱싱가장 기본적, 항상 동작조건 많으면 가독성 ↓
query()SQL 스타일, 가독성 ↑문자열 파싱 오버헤드
loc[]레이블 기반, 슬라이싱 가능조건 표현 제한적

isin() 팁:

# ❌ OR 연산자 반복 df[(df['cat'] == 'A') | (df['cat'] == 'B') | (df['cat'] == 'C')] # ✅ isin() 사용 df[df['cat'].isin(['A', 'B', 'C'])]

면접관 포인트:

“query()와 불리언 인덱싱의 성능 차이는?” → 대부분 비슷, 가독성 기준 선택


문제 2. GroupBy 기본

초급
제한시간: 5분

[문제] 브랜드별 총 매출, 평균 가격, 상품 수를 계산하고, 총 매출 기준 상위 10개를 출력하세요.

✅ 정답 코드

result = df.groupby('brand').agg( total_revenue=('sale_price', 'sum'), avg_price=('sale_price', 'mean'), product_count=('product_id', 'nunique') ).round(2).sort_values('total_revenue', ascending=False).head(10) print(result)

📖 상세 해설

agg() 문법 3가지:

# 1. 딕셔너리 방식 (컬럼: 함수) df.groupby('brand')['sale_price'].agg({'합계': 'sum', '평균': 'mean'}) # 2. Named Aggregation (권장, pandas 0.25+) df.groupby('brand').agg( total=('sale_price', 'sum'), average=('sale_price', 'mean') ) # 3. 리스트 방식 (여러 함수) df.groupby('brand')['sale_price'].agg(['sum', 'mean', 'count'])

nunique vs count:

  • nunique(): 고유값 개수 (중복 제외)
  • count(): NULL 제외 행 개수

문제 3. 결측치 처리

초급
제한시간: 5분

[문제] 결측치 현황을 파악하고, 수치형은 중앙값, 범주형은 최빈값으로 채우세요.

✅ 정답 코드

# 결측치 현황 print("=== 결측치 현황 ===") print(df.isnull().sum()[df.isnull().sum() > 0]) # 수치형 컬럼: 중앙값 numeric_cols = df.select_dtypes(include=['number']).columns for col in numeric_cols: if df[col].isnull().sum() > 0: median_val = df[col].median() df[col] = df[col].fillna(median_val) print(f"{col}: 중앙값({median_val:.2f})으로 대체") # 범주형 컬럼: 최빈값 object_cols = df.select_dtypes(include=['object']).columns for col in object_cols: if df[col].isnull().sum() > 0: mode_val = df[col].mode()[0] df[col] = df[col].fillna(mode_val) print(f"{col}: 최빈값({mode_val})으로 대체")

📖 상세 해설

결측치 처리 전략:

상황방법코드
정규분포평균fillna(df['col'].mean())
왜곡분포중앙값fillna(df['col'].median())
범주형최빈값fillna(df['col'].mode()[0])
시계열전/후 값fillna(method='ffill')
삭제dropnadropna(subset=['col'])

주의: inplace vs 할당

# ❌ 원본 변경 (권장하지 않음) df.fillna(0, inplace=True) # ✅ 새 객체 할당 (권장) df = df.fillna(0)

면접관 포인트:

“왜 평균 대신 중앙값을 선택했나요?” → 이상치 영향 최소화


🔒 프리미엄 문제 (22문제)

전체 25문제 구성

난이도문제 수주요 토픽
🟢 초급8문제필터링, GroupBy, 결측치, Merge, 문자열, 날짜
🟡 중급9문제피벗, Apply/Transform, Rolling, 조건부 컬럼, Melt
🔴 고급8문제RFM 분석, 코호트 리텐션, 메모리 최적화

프리미엄에서 배우는 내용

  • apply vs transform vs agg: 언제 어떤 것을 쓰는지
  • Rolling Window: 7일 이동평균, 누적 계산
  • RFM 분석: 고객 세그먼테이션 실전 코드
  • 코호트 리텐션: 실제 기업에서 사용하는 분석
  • 메모리 최적화: 대용량 데이터 처리 기법
  • 면접관이 기대하는 답변 포인트

🎯 전체 25문제 + 해설 구매하기

SQL + Pandas + 통계 + 케이스 스터디 번들 할인


📝 무료로 더 연습하기

면접 준비가 더 필요하다면, Cookbook의 개념 섹션을 복습하세요:

Last updated on

🤖AI 모의면접실전처럼 연습하기