province_dict = {
'서울특별시': 0,
'부산광역시': 1,
'대구광역시': 2,
'인천광역시': 3,
'광주광역시': 4,
'대전광역시': 5,
'울산광역시': 6,
'세종특별자치시': 7,
'경기도': 8,
'강원도': 9,
'충청북도': 10,
'충청남도': 11,
'전라북도': 12,
'전라남도': 13,
'경상북도': 14,
'경상남도': 15,
'제주특별자치도': 16
}
Q 1.
1. 먼저 칼럼 '광역'을 위의 dictionery를 기준으로 정렬하고 싶고,
2. 칼럼 '기초'의 사전적 순서의 역순으로 정렬하고 싶다.
어떻게 해야 할까?
정답은 2번 정렬이다.
df_result = df_result.sort_values(by='기초', ascending=False )
df_result = df_result.sort_values(by='광역', key = lambda x : x.map(province_dict) )
파이썬의 sort는 timesort를 쓴다.
이는 stable sort인데, 우선순위가 같은 데이터에 대하여 정렬 후의 결과가 바뀌지 않는다는 특징이 있다.
따라서 기초 칼럼을 먼저 정렬 후 광역 칼럼에 대하여 정렬하면, 내가 원하는 다중 칼럼이 용이해지는 것이다.
그러나 이는 앞서 말했듯 "우선순위가 같은 데이터에 대하여 정렬 후의 결과가 바뀌지 않는다"는 것이라..
가령 다음과 같이 두 번째로 정렬하고자 하는 항목이 첫번째로 정렬하고자 하는 항목 안에 중복되어 포함되어 있으면 적용이 되지 않는다. 말은 어려우니 표로 보도록 하자.
첫 번째 정렬 기준은 광역 ( 위의 dictionery )
두 번째 정렬 기준은 박물관미술관구분 으로 하고자 한다. (사전의 역순)
아까와 같이 코드를 써보자.
df = df.sort_values(by='박물관미술관구분', ascending=False )
df = df.sort_values(by='광역', key = lambda x : x.map(province_dict) )
코드를 봐보자.
먼저 사립 - 대학 - 국립 - 공립 순서로 정렬한 뒤,
광역을 정렬하면
아까와 달리 '사립 - 대학 - 국립 - 공립' 순서가 그대로 남지 않는다.
이는 같은 항목 내에서는 순서 정렬이 전혀 바뀌지 않던 아까 상황과 달리,
재정렬 될 때 같은 항목 안의 순서가 재배치 되면서 순서가 stable하게 남지 않은것으로 생각된다.
말이 좀 어려우니 쉽게 외우자면, 각 광역에 사립, 대학, 국립, 공학이 모두 있었듯이
같은 항목이 포함되어 있는 경우라면, Q1 에서 한 두번 정렬하는 방법이 용이하지 않다 정도로 기억해두자.
Q2.
1. 먼저 칼럼 '광역'을 위의 dictionery를 기준으로 정렬하고 싶고,
2. 칼럼 '박물관미술관구분'의 사전적 순서의 역순으로 정렬하고 싶다.
order = {'사립':0, '대학':1, '국립':2, '공학':3}
이건 아무리 해도 모르겠네요..
프로젝트 끝나고 복습할 때, stack에다 질문 글을 올려서 물어보고 답 찾아와서 다시 업로드 하는걸로 하겠습니다.
참고 :
본문에는 소개하지 않았지만 참고할만한 링크:
Python에서 사전 목록을 다중 정렬하는 방법은 무엇입니까?
https://stackoverflow.com/questions/33893179/how-to-multisort-list-of-dictionaries-in-python
사전이 multiple key 일 때?
https://stackoverflow.com/questions/1143671/how-to-sort-objects-by-multiple-keys
'EDA' 카테고리의 다른 글
[pandas] timedelta 구하기 (2) | 2022.10.11 |
---|---|
[2018 Data Science Bowl] Teaching notebook for total imaging newbies Kor 캐글 필사 (2) | 2022.09.20 |
[Pandas] dictionery를 사용한 맞춤 정렬 (0) | 2022.09.11 |
[numpy] kmeans.cluster_centers_[kmeans.labels_] (0) | 2022.08.27 |
[SNS] Seaborn 의 factorplot을 이용해보자. (0) | 2022.07.19 |