데이터 프레임에서 특정 컬럼을 중심으로, 리스트에 포함되는 값에 대해, 리스트의 순서대로 정렬을 해야 하는 경우가 있습니다. 예를 들어, 나무에 대해 다양한 정보를 담고 있는 매우 큰 데이터 프레임이 있습니다. 여기서 저는 관심 있는 키(HEIGHT)가 405m, 450m, 490m, 525m 이렇게 4개가 있을때, 이 4가지 키순으로 데이터 프레임을 정렬시키고자 할 때 유용하게 사용되는 코드에 대해 알아보겠습니다.
전체 코드
interest_li = [405,450,490,525] # 관심 리스트
df_sort = df[df['관심 컬럼'].isin(interest_li)].copy() # 먼저, 데이터 프레임에서 관심값 추출
sorterIndex = dict(zip(interest_li, range(len(interest_li)))) # 정렬을 위한 dictionary 생성
df_sort['sorter'] = df_sort['관심 컬럼'].map(sorterIndex) # 해당 dictionary를 이용해 정렬을 위한 열('sorter') 생성
df_sort.sort_values('sorter',inplace=True) # sorter를 기준으로 정렬
df_sort.drop('sorter', 1, inplace = True) # sorter 열 삭제
위는 데이터프레임(df)에서 관심 리스트(interest_li) 순서로 정렬하여 df_sort 데이터 프레임을 생성하는 코드 전체입니다.
아래에서 이 코드가 어떻게 작동되는지 예시를 보고, 코드를 3부분으로 나누어 자세히 설명하겠습니다.
예시
위와 같은 데이터프레임에서, HEIGHT 컬럼에 대해 리스트 [405,450,490,525] 값을 갖는 행만 가져와서, 해당 순서대로 정렬한 데이터 프레임을 출력하고자 합니다.
결과
리스트 [405,450,490,525] 값에 대해 정렬하였는데, 위 데이터프레임을 보면 405 값이 없습니다. 즉, 관심 있는 리스트에 없는 값은 자동으로 나오지 않습니다. 또한, 450, 490, 525 값이 있는 행을 보면 매우 많다는 것을 알 수 있습니다. 해당 리스트의 값이 데이터 프레임에 중복으로 있더라도 모두 출력되는 것을 알 수 있습니다.
*코드 설명
1) 관심 값 추출
df_sort = df[df['관심 컬럼'].isin(interest_li)].copy() # 먼저, 데이터 프레임에서 관심값 추출
데이터프레임(df)의 '관심 컬럼'에서 관심 리스트(interest li)의 값을 갖는 경우만 추출합니다.
2) 정렬
sorterIndex = dict(zip(interest_li, range(len(interest_li)))) #정렬을 위한 dictionary 생성
df_sort['sorter'] = df_sort['관심 컬럼'].map(sorterIndex) #해당 dictionary이용->정렬을 위해 'sorter'열 생성
df_sort.sort_values('sorter',inplace=True) #sorter를 기준으로 정렬
dict(zip(interest_li, range(len(interest_li))))를 이용해 Key로 interest_li의 값을 갖고, value로 0,1,2...로 갖는 딕셔너리를 생성합니다. 그 후, 데이터 프레임의 map함수를 이용해 '괌심 컬럼'의 값을 key로 사용하여 value값을 대응시켜 'sorter'열을 생성합니다. 그러면, '관심 컬럼'의 값이 interest_li의 순서에 대응되어 sorter 컬럼이 생성됩니다. 그 후,'sorter'칼럼을 기준으로 정렬하면, interest_li의 순서대로 정렬이 됩니다.
3) 정렬에 쓰인 열 삭제
df_sort.drop('sorter', 1, inplace = True) # sorter 열 삭제
'sorter'열은 정렬하는데만 필요하고 아무 내용도 담고 있지 않기 때문에, 정렬 후에 삭제해줍니다.
'Data Science & Analysis > Pandas' 카테고리의 다른 글
[Pandas] JSON 읽고 DataFrame으로 상호 변환하기 (1) | 2022.03.30 |
---|---|
[Pandas] 다중 인덱스 엑셀 읽기 및 처리 (Multi Index, Multi Column) (0) | 2020.09.15 |
[Pandas] Dataframe 비교 - 부분비교와 전체비교 (3) | 2020.08.13 |
[Pandas] str.extract, str.contains 정규표현식 사용 (0) | 2020.08.06 |
[Pandas] 유용한 pandas 기능 4 가지 (컬럼 순서 변경, insert, loc, Groupby) (2) | 2020.07.30 |