[TS] 주/월별 초기 날짜 변환 함수

서쿠·2023년 11월 7일
1

today-snippets

목록 보기
1/5
post-thumbnail

작성 사유

  • 데이터 분석을 하다 보면, 시계열 데이터를 주간, 월간으로 쪼개서 넣어주어야 하는 경우가 생각보다 빈번하다. (ISO 주 번호 체계 기준으로 작성)

  • 이를 위해 아래 코드를 미리 작성해서 사용에 편의성을 높이고자 한다.

함수

import pandas as pd
import datetime

def replace_week_start_date(date_str):
    date = datetime.datetime.strptime(str(date_str), "%Y%m%d")
    year = date.year
    month = date.month
    week_number = date.isocalendar()[1]
    
    if (month==1) and (week_number >= 52):  # 52 또는 53일 수 있음을 고려합니다.
        year -= 1
        week_number = 52 if week_number == 53 else week_number  # 53주차는 52주차로 변경
        start_date = datetime.datetime.strptime(f"{year}-W{week_number}-1", "%G-W%V-%u")
    else:
        start_date = datetime.datetime.strptime(f"{year}-W{week_number}-1", "%G-W%V-%u")
    
    return start_date


def replace_month_start_date(date_str):
    date = datetime.datetime.strptime(str(date_str), "%Y%m%d")
    year = date.year
    month = date.month

    start_date = datetime.datetime(year, month, 1)
    # start_date.strftime("%Y%m%d")
    return start_date
  • Run the code:
# 예시 데이터 프레임 생성
data = {
    'YYYYMMDD': ['20200102', '20210104', '20210105','20210330']
}

df = pd.DataFrame(data)

# apply 함수를 사용하여 대체된 값을 적용
df['YYYYWK']= df['YYYYMMDD'].apply(replace_week_start_date)
df['YYYYMM']= df['YYYYMMDD'].apply(replace_month_start_date)

print(df)

결과예시

   YYYYMMDD     YYYYWK     YYYYMM
0  20200102 2019-12-30 2020-01-01
1  20210104 2021-01-04 2021-01-01
2  20210105 2021-01-04 2021-01-01
3  20210330 2021-03-29 2021-03-01
profile
Always be passionate ✨

0개의 댓글