python/기초

[파이썬] pandas 시간 구간을 그룹화해보자.

끼발자 2022. 1. 19. 16:16
반응형

시계열 데이터를 만지다보면 빈 값도 있고,

term이 제각각인 경우도 있다.

만약 time step이 1초라면 데이터도 어마어마하게 많을테니 이를 효과적으로 줄여보자.

 

import pandas as pd
import random

df = pd.DataFrame()
df['Time'] = pd.date_range('2021-01-01','2021-01-02',freq='1S')
df['Color'] = random.choices(['Red','Blue','Green','White'], k=len(df))
df['Value'] = 1

 

위와 같이 데이터를 만들어보자. 무의식적으로 날짜를 적다보니 2021년 1월로 정했다.

 

코시국때문에 새해지만 새해같지않다.

 

각설하고 86401개의 데이터가 만들어지고, 색상과 Value가 추가된다.

TIme Color Value
 2021-01-01 00:00:00 Red 1
. . .
. . .
. . .
2021-01-02 00:00:00  White 1

대충 이런모양.

 

이 데이터를 1시간 단위로 그룹지어서 각 색상이 몇 번 있는지 확인해보자.

 

df = df.groupby([pd.Grouper(key='Time',freq='1H'),'Color'])['Value'].agg('sum')
print(df)



위와같이 한시간단위로 그룹지어서 출력된다. 

agg에 입력되는 sum, mean, min, max 등등 여러개를 동시에 사용하고싶다면

df = df.groupby([pd.Grouper(key='Time',freq='1H'),'Color']).agg({'Value':['sum','mean','min','max']})

위와같이 사전형태로 주면 여러 조건을 동시에 확인할 수 있다.

 

위의 예시에선 1시간단위로 그룹화했다. 다른 시간간격은

초 : S

분 :T

시간 : H

일 : D 

이렇게 freq에 다르게 정할 수 있다.

반응형