티스토리 뷰

drop id max

# index 가 제일 큰 행 drop 
df = df.drop(df['col1'].idxmax())

String to datetime

d = {'col1': [1, 2, 3], 'col2': [4, 5, 6], 'dt':['2022.03.05', '2022.07.11', '2022.12.31']}
df = pd.DataFrame(data=d)

# (1) pd.to_datetime
# errors='coerce': 변경할 수 없으면 NaT 반환
df['dt'] = pd.to_datetime(df['dt'], errors='coerce')

# (2) str <-> datetime
a = pd.to_datetime(df['dt'], format='%Y.%m.%d')  # str -> datetime. format 딱히 필요 없음.
a.dt.strftime('%Y%m%d').astype(str)  # datetime -> str

요일 정보 얻기

# d = {'col1': [1, 2, 3], 'col2': [4, 5, 6], 'dt':['2022.03.05', '2022.07.11', '2022.12.31']}
# df = pd.DataFrame(data=d)
df['dt'] = pd.to_datetime(df['dt'])
df['day_of_week'] = df['dt'].dt.day_name()

one - hot encoding

d = {'col1': [1, 2, 3], 'col2': [4, 5, 6], 'dt':['2022.07.10', '2022.07.11', '2022.07.12']}
df = pd.DataFrame(data=d)
df['dt'] = pd.to_datetime(df['dt'])
df['day_of_week'] = df['dt'].dt.day_name()

one_hot = pd.get_dummies(df['day_of_week'])
df_x = df.drop('day_of_week', axis=1)
df_x = pd.concat([df_x, one_hot], axis=1) # column bind

위 코드를 아래와 같이 작성할 수도 있음.

df_x = pd.get_dummies(df, columns=['day_of_week'])

날짜 데이터 lag (하루 뒤 판매량 가져오기)

상품 코드(prd_cd), 매장 아이디(stor_id), 판매량(qty), 판매 날짜(dt)가 있는 데이터. 

상품 코드, 매장 아이디 별 하루 뒤 판매량을 가져오는 법. 

d = {'prd_cd':['a', 'a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'b', 'b'], 
     'stor_id':['x', 'x', 'x', 'y', 'y','y', 'x', 'x', 'x', 'y', 'y','y'],
     'qty':[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
     'dt':['2022.07.10', '2022.07.11', '2022.07.12', '2022.07.10', '2022.07.11', '2022.07.12',
           '2022.07.10', '2022.07.11', '2022.07.12', '2022.07.10', '2022.07.11', '2022.07.12']}
df = pd.DataFrame(data=d)

df_shift 라는 변수에 df를 copy하고 판매 날짜(dt)의 자료형을 datetime으로.

df_shift = df
df_shift['dt'] = pd.to_datetime(df_shift['dt'])

shift 를 위해 df_shift의 index를 판매 날짜 (dt)로.

df_shift = df_shift.set_index('dt')

상품 코드(PRD_CD), 매장 아이디(STOR_ID) 별 다음 날 판매량(QTY) 데이터 가져옴. 

s = df_shift.groupby(['prd_cd', 'stor_id'])['qty'].shift(periods=-1, freq='D')

위에서 구한 다음 날 판매량 series의 이름을 qty -> qty_shift로 바꿔준 뒤 index를 reset함. 

s = s.rename('qty_shift')
s = s.reset_index()

기존 df에 다음 날 판매량 데이터 s를 left merge  함.

상품 별, 매장 id 별 값을 가져와야하기 때문에 on=['dt', 'prd_cd', 'stor_id']라고 함. 

df = pd.merge(df, s, how='left', on=['dt', 'prd_cd', 'stor_id'])

qty_shift 가 NaN인 데이터 drop하고 날짜는 다시 string 형태로. 

df = df.dropna(subset=['qty_shift'])
df = df.reset_index(drop=True)
df['dt'] = df['dt'].dt.strftime('%Y%m%d').astype(str)

mms 정보 얻고 columns 추가

  • norm_col = [‘a’, ‘b’]
  • new_norm_col = [i+'_NORM' for i in norm_col]
  • array_mms = mms.fit_transform(df[norm_col])
  • df_mms = pd.DataFrame(array_mms, columns=new_norm_col)

 

댓글
Total
Today
Yesterday
공지사항
최근에 올라온 글
글 보관함