반응형
공정 TAG 데이터를 처리하다보면, 데이터가 수집되지 않아, 비어있는 시간을 채워야 하는 경우가 있다.
특히, Group 별로 사이사이 비어있는 시간을 채우는 방법을 설명하고자 한다.
최종 결과는 다음과 같다.
DATE에 분 단위로 비어있는 row를 채우고, 그 값은 Group별 직전 시점의 값으로 채운다.
1. Library
pandas와 numpy를 불러온다.
import pandas as pd
import numpy as np
2. Create Data
실습에 사용할 데이터를 만들어준다.
나중에 Group별로 직전값으로 채워주기 위해 A와 B로 이루어진 Group 컬럼과, 값을 나타내는 value, 시간을 나타내는 DATE로 만들었다.
data = pd.DataFrame({'Group':['A','B','A','A','B','B','B'],
'value':[1,2,np.nan, np.nan,3,np.nan,5],
'DATE':['2021-01-01 03:31:00', '2021-01-01 03:30:00', '2021-01-01 03:36:00',
'2021-01-01 03:38:00', '2021-01-01 03:31:00', '2021-01-01 03:33:00',
'2021-01-01 03:39:00']})
만들어진 데이터는 다음과 같다.
3. DATE Type Change
Object형으로 만들어진 DATE를 pandas의 to_datetime()을 활용해 타입을 변경한다.
data.DATE = pd.to_datetime(data.DATE)
4. Fill Time and Fill NA by Group
이제 분 단위로 사이사이 없는 시간을 채워주고, 값은 Group별 직전 시간값으로 채우준다.
(data.groupby(["Group"])['DATE']
.apply(lambda x:pd.date_range(start=x.min(), end=x.max(), freq="min"))
.explode()
.reset_index()
.merge(data, how='left')
.ffill()
)
groupby()로 그룹을 설정해주고, DATE에 대해 apply와 explode로 사이사이 없는 시간(분)을 채워준다.
이렇게만 하면 value 컬럼 없이 Group과 DATE컬럼만 리턴되므로, 원래 data와 merge해주고, 비어있는 값을 ffill로 채워준다.
결과는 다음과 같다.
반응형
'Python > Pandas Tutorial' 카테고리의 다른 글
[Python Pandas] pandas table sorting by other table's column (0) | 2021.03.19 |
---|---|
[Python] pandas tutorial :: replace nan/na/null (0) | 2021.01.14 |
[Python] pandas tutorial :: drop duplicates in pandas (0) | 2020.10.12 |
[Python] Pandas Tutorial :: groupby transform (groupby 결과 컬럼에 추가하기) (0) | 2020.10.07 |
[Python] Pandas Tutorial :: groupby (0) | 2020.10.07 |