티스토리 뷰
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)
'pandas' 카테고리의 다른 글
pd.to_datetime, strptime, strftime, (0) | 2022.07.15 |
---|---|
group by 후 custom된 집계함수 사용 (0) | 2022.06.16 |
차집합, 교집합, drop_duplicates, duplicated, indicator (0) | 2022.03.07 |
group/sort by, index, series, array, rename, concat, merge, type (0) | 2022.03.06 |
CSV 읽기/쓰기, 행/열 선택/삭제, axis (0) | 2021.08.09 |
댓글
- Total
- Today
- Yesterday
공지사항
최근에 올라온 글
글 보관함