본문 바로가기
Projects/⛴️ Ship Waiting Time Prediction

[선박 대기시간 예측] 2차 전처리 : 중복값 처리

by ISLA! 2023. 12. 15.

 

항만 대기시간 예측 및 운영시스템 개선을 위한  2차 전처리

 

🎯 1차 전처리 결과 : 입출항 1건 당 여러 건의 시설사용허가현황 데이터가 존재함

🎯 목표 : 선박별 입출항 1건을 기준으로 중복행 제거

 

 

 

01.  중복 컬럼 확인 : 호출부호, 입항일시 기준

👉  143,915 rows 중에 71,439 rows 중복 

duplicate = df.duplicated(subset=['호출부호', '입항일시']).sum()
duplicate

 

02.  접안대기시간, 출항대기시간 결측치 = 0 처리

df['출항_대기시간_분'].fillna(0, inplace = True)
df['접안_대기시간_분'].fillna(0, inplace = True)

 

 

03.  groupby + aggregation으로 중복행의 대푯값을 추출

Groupby Column Aggregation Column Aggregation Function Result
호출, 입항 안_대시간_ max , 0 (분)
  , 간(분)
Service_Time_Start max   ,
,
Service_Time_End min   ,
  ,
first Record 째 값
소_
소_

 

grouped_df = df.groupby(['호출부호', '입항일시']).agg({
    '출항일시': 'first',
    '접안_대기시간_분': 'max',
    '출항_대기시간_분': 'max',
    'Service_Time_Start': 'max',
    'Service_Time_End': 'min',
    '계선장소_코드': 'first',  
    '계선장소_숫자': 'first',  
    '계선장소명': 'first', 
    '선박용도':'first'
}).reset_index()

new_df = pd.DataFrame(grouped_df, columns=['호출부호', '입항일시', '출항일시', '접안_대기시간_분', '출항_대기시간_분', 'Service_Time_Start', 'Service_Time_End', '계선장소_코드', '계선장소_숫자', '계선장소명','선박용도'])
728x90