행, 열의 이동을 할 수 있는 메서드이다(lag, lead).
s1.shift(periods = 1 # 가져올 위치 전달
freq = None, # 빈도
axis = 0, # 방향
fill_value = None) # 가져올 값이 없을 때 대체값
s1.shift(1) # 이전값 가져오기
s1.shift(2) # 이전 이전값 가져오기
s1.shift(2, fill_value = 0) # 이전 이전값을 가져오며, 가져올 값이 없을 경우 0으로 대체, 즉 NA 치환값
s1.shift(-1) # 이후값 가져오기
데이터프레임에서의 shift
데이터 프레임을 하나 만들어보았다.
위와 같이 데이터 프레임을 만들 때 columns 부분을 다음과 같이 만들면 더 쉽게 만들 수 있다.
문자열을 list에 넣으면 문자열 특성상 하나씩 분리가 되기 때문이다.
이전 행의 값 가져오기
이전 컬럼의 값 가져오기
freq를 사용한 index 이동
위처럼 date_range 메서드를 사용하면 지정한 두 날짜의 전 기간이 출력된다.
마지막줄을 보면 freq = 'D' 라고 되어있는데 이것이 default 이다. Day 라는 의미이다.
freq 옵션을 7D로 주게 되면 7일씩 간격을 둔 날짜가 출력이 된다.
매주 일요일만 출력하고 싶다면 아래와 같이 옵션을 주면 된다.
freq 옵션을 W 로 주게 되면 매주 일요일만 리턴시켜준다.
월요일만 리턴하여보자.
M은 매월 마지막 날짜를 리턴해준다.
예제) emp에서 각 직원의 이름, 급여, 부서번호와 상위관리자의 이름, 급여, 부서번호를 출력하여라. 단, 상위관리자가 없는 경우도 출력하며 이 경우 해당 직원의 이름, 급여, 부서번호로 대체하여라.
여기까지 출력하면 KING의 ENAME_y와 SAL_y, DEPTNO_y 가 NaN으로 리턴된다.
여기서 shift를 쓰게 되면 다음과 같이 출력된다.
모든 컬럼에 대하여 이전 값을 가져오게 되므로 원치 않은 결과가 리턴된다.
이 때에는 fillna를 사용하면 된다.
emp3.ffill(axis =1) 도 가능하다.
예제) card_history.csv 파일을 읽고 전체 지출품목에 대한 이전일자 대비 지출 증감율을 출력하여라
수치 뒤에 %를 붙이고자 한다면 다음과 같이 나타낼 수 있다.
'배우기 > 복습노트[Python과 분석]' 카테고리의 다른 글
[복습] Python Series와 DataFrame의 특성(reindex, add, sub, mul, div) (0) | 2024.01.25 |
---|---|
[복습] Python 정렬(sort_index, sort_values) (0) | 2024.01.25 |
[복습] Python 파이썬에서의 SQL문법(pandasql 패키지 sqldf 함수) (0) | 2024.01.24 |
[복습] Python 파이썬에서의 join (index join, outer join)(2) (0) | 2024.01.24 |
[실습문제] 2024. 1. 18.(목) (1문제) (0) | 2024.01.24 |