엑셀 피벗을 코드 한 줄로 — pandas groupby 집계
월별 매출 피벗을 매번 드래그하다가, 김대리 파일은 pandas groupby로 부서, 월 두 열 기준 합계·건수를 한 번에 뽑습니다. 엑셀 피벗과 결과는 같고, 스크립트로 재현할 수 있어요.
오늘은 groupby + agg로 엑셀 피벗을 코드로 옮기는 패턴입니다. merge로 합친 뒤 groupby가 자연스럽게 이어집니다.
이 글을 따라 하면 얻는 것
–groupby("열").agg(...)
– 다중 집계·열 이름 flatten
–as_index=False·reset_index
– 피벗테이블 vs groupby 선택
1. 샘플 데이터
import pandas as pd
df = pd.DataFrame({
"부서": ["영업", "영업", "마케팅", "마케팅", "영업"],
"월": ["2026-01", "2026-01", "2026-01", "2026-02", "2026-02"],
"매출": [100, 200, 150, 180, 220],
"건수": [2, 3, 1, 2, 4],
})
2. 기본 groupby
g = df.groupby(["부서", "월"], as_index=False).agg(
매출합계=("매출", "sum"),
건수합계=("건수", "sum"),
매출평균=("매출", "mean"),
)
print(g)
as_index=False — 결과가 바로 표 형태, 엑셀 붙여넣기 편함.
3. dict 스타일 agg
summary = df.groupby("부서").agg({
"매출": ["sum", "mean", "count"],
"건수": "sum",
})
summary.columns = ["_".join(c).strip() for c in summary.columns]
summary = summary.reset_index()
열 이름이 매출_sum처럼 길어지면 팀 규칙으로 rename.
4. 피벗과 비교
| 작업 | 엑셀 | pandas |
|---|---|---|
| 행·열 축 | 피벗 필드 | groupby keys / pivot_table |
| 값 | 값 필드 | agg 함수 |
| 필터 | 슬라이서 | df.query(...) 후 groupby |
복잡한 2D 피벗은 pivot_table도 검토:
pt = df.pivot_table(index="부서", columns="월", values="매출", aggfunc="sum", fill_value=0)
5. 실무 — 엑셀 읽고 집계
df = pd.read_excel("판매원본.xlsx", sheet_name="데이터")
df["월"] = pd.to_datetime(df["일자"]).dt.to_period("M").astype(str)
out = df.groupby(["부서", "월"], as_index=False).agg(매출=("금액", "sum"))
out.to_excel("부서월별집계.xlsx", index=False)
6. 주의 — NaN·중복 키
- groupby 키에 빈칸이 있으면 별도 행으로 묶임 →
fillna("미지정")또는 제거. - 같은 키에 여러 행은 합산이 기본 의도인지 확인.
7. FAQ
Q. 피벗 %는?
groupby 후 매출합계 / 매출합계.sum() 등으로 비율 열 추가.
Q. 느려요.
행 수백만이면 category dtype, 필요 열만 usecols로 읽기.
8. 연습
1) 샘플 10행 생성 2) 부서별 sum·mean 3) xlsx 저장 4) 엑셀 피벗과 숫자 대조.
참고: pandas GroupBy.
실무 메모 1
as_index=False로 표 형태 유지. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 2
피벗값과 groupby 결과 숫자 대조. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 3
빈 키는 fillna 또는 dropna. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 4
as_index=False로 표 형태 유지. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 5
피벗값과 groupby 결과 숫자 대조. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 6
빈 키는 fillna 또는 dropna. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 7
as_index=False로 표 형태 유지. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 8
피벗값과 groupby 결과 숫자 대조. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 9
빈 키는 fillna 또는 dropna. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 10
as_index=False로 표 형태 유지. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 11
피벗값과 groupby 결과 숫자 대조. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 12
빈 키는 fillna 또는 dropna. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 13
as_index=False로 표 형태 유지. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 14
피벗값과 groupby 결과 숫자 대조. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 15
빈 키는 fillna 또는 dropna. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 16
as_index=False로 표 형태 유지. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 17
피벗값과 groupby 결과 숫자 대조. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 18
빈 키는 fillna 또는 dropna. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 19
as_index=False로 표 형태 유지. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 20
피벗값과 groupby 결과 숫자 대조. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 21
빈 키는 fillna 또는 dropna. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 22
as_index=False로 표 형태 유지. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 23
피벗값과 groupby 결과 숫자 대조. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 24
빈 키는 fillna 또는 dropna. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 25
as_index=False로 표 형태 유지. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 26
피벗값과 groupby 결과 숫자 대조. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 27
빈 키는 fillna 또는 dropna. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 28
as_index=False로 표 형태 유지. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 29
피벗값과 groupby 결과 숫자 대조. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 30
빈 키는 fillna 또는 dropna. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 31
as_index=False로 표 형태 유지. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 32
피벗값과 groupby 결과 숫자 대조. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 33
빈 키는 fillna 또는 dropna. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 34
as_index=False로 표 형태 유지. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 35
피벗값과 groupby 결과 숫자 대조. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 36
빈 키는 fillna 또는 dropna. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 37
as_index=False로 표 형태 유지. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 38
피벗값과 groupby 결과 숫자 대조. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 39
빈 키는 fillna 또는 dropna. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 40
as_index=False로 표 형태 유지. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.
실무 메모 41
피벗값과 groupby 결과 숫자 대조. 분기말 보고서를 열면 같은 실수가 반복됩니다. 김대리 파일에서도 범위를 명시적으로 잡으니 응답이 빨라졌어요. 팀 README에 기준을 한 줄로 박아 두세요.