02단계 · 표 다루기 (pandas)
피벗 — 표를 가로로 돌리기
`pivot_table` 과 `crosstab` 으로 두 범주의 교차 집계를 만든다.
먼저 알아볼게요
코드로 이동 ↓pivot_table(index=세로기준, columns=가로기준, values=계산할열, aggfunc="sum") 은 두 범주를 세로·가로에 놓고 칸마다 집계값을 채운다.
groupby(["A","B"]) 와 계산 결과는 같지만, 모양이 다르다. groupby 는 세로로 길고, pivot 은 가로로 넓다. 보기 편한 쪽을 고르면 된다.
짝이 없는 칸은 NaN 이 된다. fill_value=0 을 주면 0 으로 채워져 합계를 내기 좋다.
pd.crosstab(A, B) 는 개수 세기 전용 피벗이다. values 도 aggfunc 도 필요 없다. 3유형의 카이제곱 검정은 이 표를 그대로 입력으로 받는다.
pivot 결과도 표라서 .loc["강남점"].sum() 처럼 다시 골라 계산할 수 있다.
이렇게 써요
import pandas as pd
df = pd.read_csv("sales.csv")
print(df.pivot_table(index="회원등급", columns="지점", values="수량", aggfunc="mean").round(2))기억할 한 가지
개수만 셀 때는 crosstab, 값을 집계할 때는 pivot_table. 카이제곱 검정의 입력이 곧 crosstab 이다.
직접 해보기
sales.csv 에서 ① 지점×상품 의 수량 합 피벗(빈 칸은 0) ② 지점×회원등급 의 crosstab ③ 피벗에서 강남점 행의 합을 출력하세요.
제공 파일 1개 · 내용 보기
파일은 준비되어 있어요. 코드에서 이름으로 불러오세요.
sales.csv
주문일,지점,상품,수량,단가,회원등급 2026-01-24,홍대점,키보드,2,89000,Silver 2026-02-19,강남점,마우스,1,32000,Gold 2026-01-02,판교점,모니터,4,245000,Silver 2026-01-23,강남점,마우스,5,32000,Gold 2026-03-19,판교점,노트북,1,1290000,VIP 2026-01-03,판교점,노트북,5,1290000,Gold 2026-01-01,홍대점,키보드,3,89000,VIP 2026-01-25,홍대점,키보드,2,89000,Silver 2026-03-05,판교점,모니터,3,245000,Gold 2026-01-12,강남점,마우스,1,32000,VIP 2026-02-26,판교점,마우스,4,32000,Silver 2026-03-16,홍대점,마우스,5,32000,VIP 2026-02-03,판교점,마우스,2,32000,VIP 2026-03-25,판교점,모니터,2,245000,Gold 2026-02-14,홍대점,마우스,1,32000,Silver 2026-02-05,강남점,모니터,4,245000,Gold 2026-02-13,판교점,노트북,1,1290000,Gold 2026-01-12,홍대점,키보드,3,89000,Gold 2026-02-11,홍대점,모니터,1,245000,Gold 2026-03-16,판교점,키보드,4,89000,Silver 2026-03-07,홍대점,마우스,5,32000,Gold 2026-03-05,홍대점,마우스,5,32000,Gold 2026-03-16,홍대점,모니터,4,245000,Gold 2026-01-02,강남점,마우스,3,32000,VIP 2026-02-21,판교점,노트북,1,1290000,Gold 2026-03-28,강남점,키보드,2,89000,Silver 2026-01-24,홍대점,키보드,3,89000,VIP 2026-02-26,판교점,모니터,4,245000,Gold 2026-03-28,강남점,모니터,4,245000,VIP 2026-03-19,판교점,노트북,1,1290000,VIP 2026-01-19,판교점,모니터,4,245000,Gold 2026-01-22,강남점,모니터,4,245000,VIP 2026-01-14,강남점,키보드,4,89000,Silver 2026-01-28,강남점,키보드,1,89000,Gold 2026-01-11,강남점,모니터,3,245000,Gold 2026-01-22,강남점,키보드,1,89000,VIP 2026-03-10,판교점,마우스,5,32000,Silver 2026-01-17,강남점,키보드,5,89000,VIP 2026-02-23,판교점,노트북,5,1290000,VIP 2026-01-22,강남점,노트북,1,1290000,Silver 2026-02-23,판교점,마우스,5,32000,Gold 2026-03-20,강남점,노트북,5,1290000,VIP 2026-02-01,홍대점,모니터,3,245000,Silver 2026-01-01,홍대점,마우스,5,32000,Gold 2026-03-23,홍대점,마우스,3,32000,Gold 2026-02-16,홍대점,노트북,2,1290000,Silver 2026-03-12,강남점,모니터,1,245000,VIP 2026-03-26,강남점,마우스,3,32000,Silver 2026-02-04,판교점,모니터,5,245000,Silver 2026-01-24,홍대점,마우스,3,32000,VIP 2026-03-08,홍대점,모니터,4,245000,Gold 2026-02-11,홍대점,마우스,5,32000,VIP 2026-03-22,강남점,마우스,5,32000,VIP 2026-01-19,강남점,노트북,2,1290000,VIP 2026-01-12,판교점,마우스,1,32000,Gold 2026-02-08,강남점,마우스,2,32000,VIP 2026-02-15,홍대점,모니터,4,245000,VIP 2026-03-16,홍대점,노트북,1,1290000,Silver 2026-01-13,판교점,모니터,4,245000,VIP 2026-02-09,판교점,키보드,3,89000,Silver
내 코드 Python
Python 준비 중… 처음 한 번만 내려받아요
들여쓰기: Tab · 편집기에서 나가기: Esc 다음 Tab
실행 결과
실행하면 코드가 출력한 내용이 여기에 나타나요.
막혔을 때
풀이와 비교하기
내 코드와 한 줄씩 비교해 보세요. 풀이를 보는 것만으로 완료되지는 않아요.
import pandas as pd
df = pd.read_csv("sales.csv")
p = df.pivot_table(index="지점", columns="상품", values="수량", aggfunc="sum", fill_value=0)
print(p)
print(pd.crosstab(df["지점"], df["회원등급"]))
print(p.loc["강남점"].sum())