Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 |
30 | 31 |
Tags
- tensorflow
- ubuntu
- 리눅스
- MS-SQL
- 날짜
- flutter
- Linux
- 라즈베리파이
- PyQt
- urllib
- Unity
- PER
- IOS
- 다이어트
- javascript
- 유니티
- 함수
- ASP
- mssql
- sqlite
- Excel
- python
- PyQt5
- 맛집
- GIT
- MySQL
- port
- node.js
- pandas
- swift
Archives
아미(아름다운미소)
주차를 일자로변경 본문
import pandas as pd
import numpy as np
def calculate_week_start(df, week_code_col, output_col='start_datetime'):
"""
주차 코드를 시작일로 변환하는 함수 (성능 최적화 버전).
Parameters:
df (pd.DataFrame): 입력 데이터프레임
week_code_col (str): 주차 코드 컬럼명 (예: "202401A")
output_col (str): 결과 컬럼명 (기본값: "start_datetime")
Returns:
pd.DataFrame: 시작일이 추가된 데이터프레임
"""
# 원본 데이터프레임 보존을 위해 복사
df = df.copy()
# 1. 년도와 주차 추출 (벡터화)
years = df[week_code_col].str[:4].astype(int)
weeks = df[week_code_col].str[4:6].astype(int) # 주차 2자리 고정 (예: "01")
# 2. 첫 번째 목요일 계산 (ISO 주차 표준)
first_day = pd.to_datetime(years.astype(str) + '-01-01')
first_thursday = first_day + pd.to_timedelta((3 - first_day.dt.weekday) % 7, unit='D')
# 3. 첫 번째 주 시작일 계산 (월요일)
start_week1 = first_thursday - pd.Timedelta(days=3)
# 4. 해당 연도 마지막 주차 계산 (12월 28일 기준)
dec28 = pd.to_datetime(years.astype(str) + '-12-28')
last_week = dec28.dt.isocalendar().week
# 5. 유효성 검사
is_valid = weeks.between(1, last_week.values, inclusive='both')
# 6. 시작일 계산 (벡터화)
df[output_col] = pd.to_datetime(
np.where(
is_valid,
(start_week1 + pd.to_timedelta((weeks - 1) * 7, unit='D')).values,
pd.NaT
)
)
return df
'랭귀지 > pandas' 카테고리의 다른 글
두 대이타 프레임비교 (0) | 2025.02.26 |
---|---|
일수를 datetime.timedelta 변환 (0) | 2025.02.26 |
아래는 두 개의 동일한 구조를 가진 데이터프레임을 생성하고, 두 데이터프레임의 값을 비교하여 **틀린 행을 찾아내는 예제** (0) | 2025.02.18 |
Pandas에서 특정 조건을 만족하지 않을 경우, 날짜 열을 비교하여 한 주 전의 값을 가져오기 (0) | 2025.02.18 |
np.select (0) | 2025.02.13 |
Comments