안녕하세요~ 꽁냥이에요. 언젠가 회사 동료분께서 특정 칼럼의 값이 바뀌는 행을 찾는 법을 물어보셔서 알게 된 내용이 있는데요. 여러분들에게도 공유하면 언제가 써먹을 수 있을 것 같아서 이번 포스팅을 준비했습니다.
특정 칼럼의 값이 바뀐다는 것은 다음과 같이 (시간 순으로 정렬된) 데이터가 주어졌을 때 특정 칼럼의 값이 이전과는 다른 값이 나타났다는 뜻입니다(빨간 박스).
이 경우 우리는 다음과 같이 3가지 경우에 대해서 바뀌는 행(지점)을 추출하는 방법을 알아볼 것입니다.
Case 1) 변경 직후
먼저 데이터를 만들어줍니다.
import pandas as pd
df = pd.DataFrame()
df['방문 시간'] = pd.date_range('2022-01-01', '2022-01-07')
df['장소'] = ['서울', '서울', '경기', '경기', '경기', '대전', '대전']
변경 직후는 첫 번째 행을 포함시키고 그 뒤로 특정 칼럼의 값 변경 직후의 행을 추출합니다. 방법은 쉽습니다. 아래 그림과 같이 '장소' 칼럼을 shift를 이용하여 아래로 한칸 내리고 원래의 '장소' 칼럼과 비교하고 그중에서 서로 다른 행을 가져오면 됩니다.
코드는 다음과 같아요.
df[df['장소'] != df['장소'].shift(1)]
Case 2) 변경 직전
눈치가 빠르신 분들은 아셨을 겁니다. shift를 이용해서 위로 땡겨서 원래의 칼럼과 비교한 뒤 같지 않은 행을 추출하면 됩니다.
코드는 다음과 같습니다.
df[df['장소'] != df['장소'].shift(-1)]
Case 3) 인접 부분
이 부분은 shift가 아닌 for 문을 이용하여 구현할 수 있습니다. 데이터의 모든 행을 돌면서 현재 행의 장소와 다음 행의 장소가 다르면 현재 행, 다음 행 인덱스를 저장합니다.
target_idx = []
for i, row in df.iterrows():
if i<len(df)-1:
if row['장소'] != df.loc[i+1, '장소']:
target_idx += [i, i+1]
df.loc[target_idx, ]
이번 포스팅에서는 shift를 사용하여 특정 칼럼의 값이 변경되는 행을 추출하는 방법에 대하여 알아 보았습니다. 회사 동료가 물어본 것은 Case 2 변경 직전에 대한 행을 추출하는 방법이었는데요. 하는 김에 여러 케이스를 더 조사하여 내용에 추가하였습니다. 이번 포스팅은 은근 자주 써먹는 테크닉이라서 알아두시면 도움이 됩니다. 지금까지 꽁냥이의 글 읽어주셔서 감사합니다.
'데이터 분석 > 데이터 전처리' 카테고리의 다른 글
[Pandas] 27. 문자열 데이터 다루기(공백 제거, 슬라이싱, 문자 대체, 분리, 문자 연결) (feat. strip, slice, split, replace, cat) (385) | 2022.05.27 |
---|---|
[Pandas] 여러가지 통계량(평균, 분산, 중앙값 등) 구하기 (415) | 2022.05.20 |
[Numpy] 결측치(NaN, missing)를 포함한 두 배열의 상관계수(correlation) 구하기 (with ma.corrcoef) (378) | 2022.05.12 |
[Pandas] 26. 단순 이동 평균 계산하기 feat. rolling.mean() (410) | 2022.05.11 |
[Pandas] pandas-datareader를 이용하여 주식(주가) 데이터 가져오기! (398) | 2022.05.11 |
댓글