엑셀 피벗을 코드 한 줄로 — 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) 엑셀 피벗과 숫자 대조.

다음: read_html · 메일 발송.

참고: 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에 기준을 한 줄로 박아 두세요.

작성자 소개