본문 바로가기
파이썬/데이터 다듬기

[240920] 데이터다듬기#8 - 판다스 데이터프레임 변경(4)

by 황오독 2024. 9. 21.

1. Rolling (rolling()메서드))
 - 일정 기간에 대한 집계를 수행할 수 있음
 - ex) 최근 3일간, 일주일간의 평균이나 합을 집계

# 최근 3일간 Ozone 열 평균
air['Ozone'].rolling(window=3, min_periods=1).mean() # window=생략가능

# 최근 7일간 Ozone 열 평균
air['Ozone'].rolling(window=7, min_periods=1).mean()

# 새로운 열 추가
air['OZ_mean_3'] = round(air['Ozone'].rolling(window=3, min_periods=1).mean(), 1)
air['OZ_mean_7'] = round(air['Ozone'].rolling(window=7, min_periods=1).mean(), 1)
# 앞에 최근값 3개나 7개가 없어도 2개의 평균, 1개의 평균을 계산함.

 
 
2. Shift (shift())
  - 데이터를 행 방향 또는 열 방향으로 이동시킬 때 사용
  - 시계열 데이터에서 이전 값과 비교하는 데 사용

# 새로운 열 추가
air['OZ_lag_1'] = air['Ozone'].shift(1)
air['OZ_lag_2'] = air['Ozone'].shift(2)
air['OZ_lag_3'] = air['Ozone'].shift(3)

 
 
3. Rolling & Shift
- 일반적으로 당일을 제외한 기간에 대한 rolling을 수행할 때 사용
- ex) 당일을 제외한 최근 3일간의 Ozone 값 평균을 갖는 열 추가

# 새로운 열 추가
air['OZ_mean_3_lag_1'] = round(air['Ozone'].rolling(3, min_periods=1).mean().shift(1), 2)

 
# 참고
- 내일의 Ozone 값을 예측하는 머신러닝 모델을 만들때는 1일 후 값을 각 행에 추가해야 함.
- 즉 당일 Ozone, Temp, Sola.R 등의 정보와 최근 Ozone값과 평균 등을 활용해 다음날 Ozone 값을 예측함.
 
4. Pivot
 1) 기존형태

 
 2) 피벗형태

 
5. Melt (pd.melt())
 매개변수 의미
  1) id_vars : 움직이지 않을 열 (=기준 열)
  2) value_vars : '값'이 되어 아래로 내려올 현재 열
   - 생략하면 id_vars에 지정한 열 이외의 모든 열
  3) var_name : value_vars에 지정한 열이 값이 될 때 부여할 열 이름
  4) value_name : 새로운 열이 되는 기존 값에 부여할 이름

# 언피벗
day_count_n = pd.melt(day_count_w, 
                      id_vars=['Year', 'Month'],
                      # value_vars=range(1, 32),
                      var_name='Day',
                      value_name='Count')

# 정렬
day_count_n.sort_values(by=['Year', 'Month', 'Day'], ascending=True, inplace=True)

# 결측치 제거(31일이 꽉 차지 않는 월에 결측치 존재)
day_count_n.dropna(inplace=True)

# 인덱스 초기화
day_count_n.reset_index(drop=True, inplace=True)

# 데이터 형식 변경
day_count_n['Count'] = day_count_n['Count'].astype(int)

# 확인
day_count_n