Pandas: groupby()를 사용하여 시계열을 리샘플링하는 방법


시계열 데이터를 리샘플링한다는 것은 새로운 기간에 걸쳐 데이터를 집계하는 것을 의미합니다.

groupby 연산자를 사용하여 pandas에서 시계열을 다시 샘플링하려면 다음 기본 구문을 사용할 수 있습니다.

 group = df. groupby ([pd. Group (freq=' W '), ' store '])

result = group[' sales ']. sum (). unstack (' store '). fillna (0) 

이 특정 예는 매장 열별로 DataFrame의 행을 그룹화한 다음 시계열을 주별로 다시 샘플링하고( freq=’W’ ) 판매 열에 있는 값의 합계를 계산합니다.

시계열 데이터를 다음을 포함하여 다양한 기간으로 다시 샘플링할 수 있습니다.

  • S : 초
  • min : 분
  • H : 시간
  • J :일
  • : 주
  • : 월
  • Q : 분기
  • A : 연도

다음 예에서는 실제로 그룹 별 작업을 사용하여 시계열 데이터를 리샘플링하는 방법을 보여줍니다.

예: Pandas에서 groupby를 사용하여 시계열 리샘플링

두 개의 서로 다른 매장에서 매일 발생한 총 매출을 보여주는 다음과 같은 pandas DataFrame이 있다고 가정합니다.

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' sales ': [13, 14, 17, 17, 16, 22, 28, 10, 17, 10, 11],
                   ' store ': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B']} ,
                   index=pd. date_range ('2023-01-06', '2023-01-16', freq='d'))

#view DataFrame
print (df)

            sales store
2023-01-06 13 A
2023-01-07 14 A
2023-01-08 17 A
2023-01-09 17 A
2023-01-10 16A
2023-01-11 22 B
2023-01-12 28 B
2023-01-13 10 B
2023-01-14 17 B
2023-01-15 10 B
2023-01-16 11 B

매장 별로 행을 그룹화한 다음 주별로 시계열을 다시 샘플링한 다음 판매 열의 값 합계를 계산한다고 가정해 보겠습니다.

이를 위해 다음 구문을 사용할 수 있습니다.

 #group by store and resample time series by week
group = df. groupby ([pd. Group (freq=' W '), ' store '])

#calculate sum of sales each week by store
result = group[' sales ']. sum (). unstack (' store '). fillna (0)

#view results
print (result)

store AB
2023-01-08 14.0 0.0
2023-01-15 16.5 17.0
2023-01-22 0.0 11.0

결과에서 우리는 다음을 볼 수 있습니다:

  • 매장 A에서 2023년 1월 8일로 끝나는 주 동안의 매출 합계는 14 입니다.
  • 매장 B에서 2023년 1월 8일로 끝나는 주 동안의 매출 합계는 0 입니다.

등등.

이 예에서는 판매 열의 값 합계를 계산하도록 선택했습니다.

그러나 개수, 평균, 중앙값, 최소값, 최대값 등과 같은 다른 측정항목을 선택할 수도 있습니다.

간단히 위 코드의 sum() 을 count() , Mean() , Median() 등으로 바꾸세요. 원하는 측정항목을 계산합니다.

추가 리소스

다음 튜토리얼에서는 Python에서 다른 일반적인 작업을 수행하는 방법을 설명합니다.

Matplotlib에서 시계열을 그리는 방법
Seaborn에서 시계열을 그리는 방법
Python의 시계열에서 MAPE를 계산하는 방법

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다