랭귀지/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)