Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Pandas DataFrame을 분 단위로 그룹화하는 방법 – pd.Grouper 완벽 가이드

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를 활용하면 초, 분, 시간, 일 단위 등 원하는 어떤 시간 간격으로도 손쉽게 시계열 데이터를 집계할 수 있어 로그 분석, 매출 분석 등 실무에서 매우 유용하게 활용됩니다.