[Pandas] resample
Pandas resample, DataFrame.resample, 시계열 집계
정의
resample(rule) 는 시계열 데이터를 다른 빈도 (월별, 일별, 시간별 등) 로 재샘플링하면서 집계한다. Pandas groupby 의 시계열 버전.
DatetimeIndex (또는 on= 으로 datetime 컬럼) 이 필수.
시각화
기본
df.resample('D').sum() # 일별 합
df.resample('W').mean() # 주별 평균
df.resample('ME').sum() # 월말 (Month End)
df.resample('h').mean() # 시간별 평균
python
import pandas as pd
import numpy as np
idx = pd.date_range('2024-01-01', periods=10, freq='D')
df = pd.DataFrame({'sales': [10,15,12,18,20,25,22,30,28,35]}, index=idx)
print(df.resample('3D').sum()) 결과
sales
2024-01-01 37
2024-01-04 63
2024-01-07 80
2024-01-10 35| date | 3-day sum |
|---|---|
| 2024-01-01 | 37 (10+15+12) |
| 2024-01-04 | 63 (18+20+25) |
| 2024-01-07 | 80 (22+30+28) |
| 2024-01-10 | 35 |
빈도 (frequency) 문법
| 코드 | 의미 |
|---|---|
s, min, h | 초, 분, 시간 |
D | 일 |
W | 주 (일요일 끝) |
W-MON | 주 (월요일 끝) |
ME | 월말 (pandas 2.x, 이전엔 ‘M’) |
MS | 월초 |
QE, QS | 분기 말/초 |
YE, YS | 연 말/초 |
B | 영업일 (Business day) |
BME | 영업월말 |
IMPORTANT
pandas 2.x 에서 'M', 'Q', 'Y' 가 deprecated. 명시적으로 'ME', 'QE', 'YE' 사용.
upsampling (간격 축소 + interpolate)
df.resample('h').ffill() # 시간별 → 분 단위 forward fill
df.resample('h').interpolate() # 선형 보간
downsampling (집계 함수)
df.resample('W').agg({
'sales': ['sum', 'mean'],
'orders': 'count',
})
label / closed
df.resample('W', closed='right', label='right')
# 'right' 라벨: 주의 마지막 날 (일요일) 이 결과 index
# 'left' 라벨: 주의 첫 날
closed: 구간의 닫힌 쪽 (포함 여부)label: 결과 index 의 위치
origin (시작 기준)
df.resample('5min', origin='start_day')
# 매일 0시부터 5분 단위
자주 쓰는 패턴
일별 → 월별 매출
monthly = df.resample('ME', on='date')['amount'].sum()
분 단위 → 시간 단위 평균
hourly = df.resample('h').mean()
영업일 기준 (주말 제외)
df.resample('B').agg({'price': 'last'})
asfreq vs resample
# asfreq: 단순 재인덱싱, 집계 없음
df.asfreq('h', fill_value=0)
# resample: 집계 동반
df.resample('h').sum()
함정
1. DatetimeIndex 필수
df.resample('D') # TypeError if not DatetimeIndex
df.resample('D', on='date') # 특정 datetime 컬럼 사용
2. NaN 발생
# 데이터가 없는 기간은 NaN
df.resample('h').sum()
# 일부 시간은 0 이 아닌 NaN (구분: 데이터가 없음 vs 합이 0)
fill_value=0 또는 .fillna(0).
3. timezone 영향
# tz-aware index 에서 'D' 는 자정 기준 (해당 timezone 의)
df.tz_convert('UTC').resample('D').sum()
참고
이 글의 용어 (5개)
- [Pandas] .dt accessorpandas
- 정의 는 datetime Series 의 각 구성요소 (년/월/일/시/분/요일 등) 에 벡터로 접근하는 accessor. 의 datetime 버전. 기본 컴포넌트 | 속성 | 의…
- [Pandas] date_range / Timestamppandas
- 정의 - : 정해진 시작/끝/간격으로 datetime 시퀀스 생성 - : pandas 의 단일 datetime 객체 - : 시간 차이 daterange , , , 중 3 개 만 …
- [Pandas] groupbypandas
- 정의 는 데이터를 그룹으로 나누고 (split), 각 그룹에 함수를 적용 (apply), 결과를 합쳐 (combine) 새 DataFrame 으로 만드는 split-apply-c…
- [Pandas] rolling / expandingpandas
- 정의 - : 고정 크기 슬라이딩 윈도우 (이동 평균 등) - : 시작부터 누적 윈도우 (cumulative) - : 지수 가중 이동 평균 시각화 rolling 기본 <CodeWi…
- [Pandas] to_datetimepandas
- 정의 는 문자열/숫자를 datetime 으로 변환. pandas 의 시계열 작업의 시작. 기본 <CodeWithOutput language="python" outputLangua…
💬 댓글