[Pandas] 리스트(list) 순서로 데이터프레임 정렬

반응형

리스트의 순서로 데이터프레임 정렬

데이터 프레임에서 특정 컬럼을 중심으로, 리스트에 포함되는 값에 대해, 리스트의 순서대로 정렬을 해야 하는 경우가 있습니다. 예를 들어, 나무에 대해 다양한 정보를 담고 있는 매우 큰 데이터 프레임이 있습니다. 여기서 저는 관심 있는 키(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] 값을 갖는 행만 가져와서, 해당 순서대로 정렬한 데이터 프레임을 출력하고자 합니다.

결과

df_sort

리스트 [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'열은 정렬하는데만 필요하고 아무 내용도 담고 있지 않기 때문에, 정렬 후에 삭제해줍니다.

 

반응형

댓글

Designed by JB FACTORY