랭귀지/pandas
Pandas에서 특정 조건을 만족하지 않을 경우, 날짜 열을 비교하여 한 주 전의 값을 가져오기
유키공
2025. 2. 18. 09:03
import pandas as pd
# 샘플 데이터 범위 확장 (년도가 바뀌는 경우 포함)
data = {
'date': pd.date_range(start='2023-12-20', periods=20, freq='D'), # 2023-12-20부터 20일간
'value': range(100, 2100, 100) # 100부터 2000까지 100씩 증가
}
df = pd.DataFrame(data)
# 주차(week) 컬럼 추가 (ISO 주차 기준)
df['week'] = df['date'].dt.isocalendar().week
df['year'] = df['date'].dt.isocalendar().year # 연도 정보 추가
# 조건: value가 500보다 큰 경우
condition = df['value'] > 500
# 조건을 만족하는 경우, 한 주 전의 값을 가져오기
df['new_value'] = df['value'] # 새로운 열 생성
for i in range(len(df)):
if condition[i]:
one_week_ago = df.loc[i, 'date'] - pd.Timedelta(weeks=1)
# 한 주 전의 값을 찾기
previous_value = df[df['date'] == one_week_ago]['value'].values
if len(previous_value) > 0:
df.loc[i, 'new_value'] = previous_value[0]
print(df)
결과
date value week year new_value
0 2023-12-20 100 51 2023 100
1 2023-12-21 200 51 2023 200
2 2023-12-22 300 51 2023 300
3 2023-12-23 400 51 2023 400
4 2023-12-24 500 51 2023 500
5 2023-12-25 600 52 2023 100 # 한 주 전 값 (2023-12-18)
6 2023-12-26 700 52 2023 200 # 한 주 전 값 (2023-12-19)
7 2023-12-27 800 52 2023 300 # 한 주 전 값 (2023-12-20)
8 2023-12-28 900 52 2023 400 # 한 주 전 값 (2023-12-21)
9 2023-12-29 1000 52 2023 500 # 한 주 전 값 (2023-12-22)
10 2023-12-30 1100 52 2023 600 # 한 주 전 값 (2023-12-23)
11 2023-12-31 1200 52 2023 700 # 한 주 전 값 (2023-12-24)
12 2024-01-01 1300 1 2024 1300 # 한 주 전 날짜 없음 → 기존 값 유지
13 2024-01-02 1400 1 2024 1400 # 한 주 전 날짜 없음 → 기존 값 유지
14 2024-01-03 1500 1 2024 1500 # 한 주 전 날짜 없음 → 기존 값 유지
15 2024-01-04 1600 1 2024 1600 # 한 주 전 날짜 없음 → 기존 값 유지
16 2024-01-05 1700 1 2024 1700 # 한 주 전 날짜 없음 → 기존 값 유지
17 2024-01-06 1800 1 2024 1800 # 한 주 전 날짜 없음 → 기존 값 유지
18 2024-01-07 1900 1 2024 1900 # 한 주 전 날짜 없음 → 기존 값 유지
19 2024-01-08 2000 2 2024 1300 # 한 주 전 값 (2024-01-01)