[TS] ์ฃผ/์›”๋ณ„ ์ดˆ๊ธฐ ๋‚ ์งœ ๋ณ€ํ™˜ ํ•จ์ˆ˜

Posted by Euisuk's Dev Log on November 7, 2023

[TS] ์ฃผ/์›”๋ณ„ ์ดˆ๊ธฐ ๋‚ ์งœ ๋ณ€ํ™˜ ํ•จ์ˆ˜

์›๋ณธ ๊ฒŒ์‹œ๊ธ€: https://velog.io/@euisuk-chung/TS-์ฃผ์›”๋ณ„-์ดˆ๊ธฐ-๋‚ ์งœ-๋ณ€ํ™˜-ํ•จ์ˆ˜

์ž‘์„ฑ ์‚ฌ์œ 

  • ๋ฐ์ดํ„ฐ ๋ถ„์„์„ ํ•˜๋‹ค ๋ณด๋ฉด, ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ฐ„, ์›”๊ฐ„์œผ๋กœ ์ชผ๊ฐœ์„œ ๋„ฃ์–ด์ฃผ์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ฐ๋ณด๋‹ค ๋นˆ๋ฒˆํ•˜๋‹ค. (ISO ์ฃผ ๋ฒˆํ˜ธ ์ฒด๊ณ„ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑ)
  • ์ด๋ฅผ ์œ„ํ•ด ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋ฏธ๋ฆฌ ์ž‘์„ฑํ•ด์„œ ์‚ฌ์šฉ์— ํŽธ์˜์„ฑ์„ ๋†’์ด๊ณ ์ž ํ•œ๋‹ค.

ํ•จ์ˆ˜

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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:
1
2
3
4
5
6
7
8
9
10
11
12
# ์˜ˆ์‹œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ ์ƒ์„ฑ
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)

๊ฒฐ๊ณผ์˜ˆ์‹œ

1
2
3
4
5
   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


-->