Pandas에서 시간 기준으로 데이터를 묶어 집계하고 싶다면 groupby() 함수와 pd.Grouper를 함께 사용하는 것이 가장 효과적입니다. 이 글에서는 자동차 판매 기록 데이터를 예로 들어, 분(minute) 단위 간격으로 DataFrame을 그룹화하고 구간별 등록 가격(Reg_Price)의 합계를 계산하는 방법을 알아보겠습니다.
예제 데이터 준비하기
먼저 세 개의 열(Car, Date_of_Purchase, Reg_Price)로 구성된 DataFrame을 만듭니다. 여기서 Date_of_Purchase 열은 날짜와 시간을 모두 포함하는 타임스탬프 값입니다.
import pandas as pd
# Date_of_Purchase 열을 포함한 데이터프레임 생성
dataFrame = pd.DataFrame(
{
"Car": ["Audi", "Lexus", "Tesla", "Mercedes", "BMW", "Toyota", "Nissan", "Bentley", "Mustang"],
"Date_of_Purchase": [
pd.Timestamp("2021-07-28 00:10:00"),
pd.Timestamp("2021-07-28 00:12:00"),
pd.Timestamp("2021-07-28 00:15:00"),
pd.Timestamp("2021-07-28 00:16:00"),
pd.Timestamp("2021-07-28 00:17:00"),
pd.Timestamp("2021-07-28 00:20:00"),
pd.Timestamp("2021-07-28 00:35:00"),
pd.Timestamp("2021-07-28 00:42:00"),
pd.Timestamp("2021-07-28 00:57:00"),
],
"Reg_Price": [1000, 1400, 1100, 900, 1700, 1800, 1300, 1150, 1350]
}
)
print("DataFrame...\n", dataFrame)7분 간격으로 그룹화하기
groupby() 함수 내부에서 pd.Grouper를 사용해 기준이 될 열인 Date_of_Purchase를 지정합니다. 이때 freq 파라미터를 '7min'으로 설정하면 7분 간격으로 데이터가 그룹화됩니다.
# Grouper로 Date_of_Purchase 열을 선택하고 7분 단위로 그룹화
print("\nGroup Dataframe by 7 minutes...\n",
dataFrame.groupby(pd.Grouper(key='Date_of_Purchase', axis=0, freq='7min')).sum())주요 파라미터 설명
- key: 그룹화의 기준이 되는 날짜·시간 열의 이름
- axis: 축 방향 설정 (0 = 행 기준)
- freq: 그룹화할 시간 간격 ('7min', '5min', '1H' 등 다양하게 지정 가능)
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
DataFrame...
Car Date_of_Purchase Reg_Price
0 Audi 2021-07-28 00:10:00 1000
1 Lexus 2021-07-28 00:12:00 1400
2 Tesla 2021-07-28 00:15:00 1100
3 Mercedes 2021-07-28 00:16:00 900
4 BMW 2021-07-28 00:17:00 1700
5 Toyota 2021-07-28 00:20:00 1800
6 Nissan 2021-07-28 00:35:00 1300
7 Bentley 2021-07-28 00:42:00 1150
8 Mustang 2021-07-28 00:57:00 1350
Group Dataframe by 7 minutes...
Reg_Price
Date_of_Purchase
2021-07-28 00:07:00 2400.0
2021-07-28 00:14:00 5500.0
2021-07-28 00:21:00 NaN
2021-07-28 00:28:00 NaN
2021-07-28 00:35:00 1300.0
2021-07-28 00:42:00 1150.0
2021-07-28 00:49:00 NaN
2021-07-28 00:56:00 1350.0결과 해석
출력 결과를 보면 7분 구간별로 Reg_Price의 합계가 계산된 것을 확인할 수 있습니다. 예를 들어 00:14:00 구간에는 00:10, 00:12, 00:15, 00:16, 00:17에 발생한 거래가 포함되어 합계 5500이 산출되었습니다. 반면 해당 구간에 데이터가 없으면 NaN이 표시되며, 필요하다면 .fillna(0) 등을 활용해 결측값을 처리할 수 있습니다.
이처럼 pd.Grouper를 활용하면 초, 분, 시간, 일 단위 등 원하는 어떤 시간 간격으로도 손쉽게 시계열 데이터를 집계할 수 있어 로그 분석, 매출 분석 등 실무에서 매우 유용하게 활용됩니다.