[27일차]Series - 값 정렬(key=)

김준석·2024년 1월 2일

key= -정렬 기준 지정

  • 정렬에 필요한 크고 작음의 기준을 정한다.
  • 글자라면 A-Z순, 숫자라면 크고 작음
  • key인자에 함수를 지정하면 되며, 잘 사용하려면 lambda에 익숙해야 한다.

정렬 기준

알파벳 정렬 기준은 보통 A-Z → a-z 순으로 진행된다.

아스키 코드를 보면 소문자가 대문자보다 값이 크기 때문이다.

실제로도 그런지 확인해 보자.

예시)과일정보가 있는데 대소문자가 뒤죽박죽일때

basket =['apple','Banana','Cherry','durian']
basket_series = pd.Series(basket)

basket_series.sort_values()

과일 리스트를 가지고 있는 basket_series라는 Series를 생성 후 오름차순 해주었다.

결과값에서는 대문자가 먼저 보이는 것을 확인할 수 있다.

우리가 원하는 오름차순은 apple이 먼저였다. 그렇다면 해결 방법은 무엇이 있을까?

모든 문자열을 대문자(upper) 혹은 소문자(lowe)로 변경

basket_series.str.lower().sort_values()

  • basket_series.str을 사용해서 문자열 메소드를 활용할 수 있도록 한 뒤 lower()사용.

하지만 해당 코드는 값이 변경되는 이슈가 발생한다.

이때 값이 변경되지 않도록 하기 위해서는

sort_values 의 인자값에 key=lambda를 활용하여 진행할 수 있다.

basket_series.sort_values(key = lambda x : x.str.lower())

key = lambda x : x에는 Series가 들어올 것이다.

x.str.lower() : x에 들어온 Series들을 각 각 str.lower() 해준다.

이후 해당 값을 기준으로 오름차순 진행.


key 연습 2

문제! 이름 길이 순으로 정렬해보자.

나의 풀이)

rich_set.str.len().sort_values(ascending=False)

엇 근데 이렇게 풀면 기존 값이 안보인다..

이전에 배웠던 인자 key=lambda를 사용해서 진행해보자.

rich_set.sort_values(key=lambda x : x.str.len(),ascending = False)

GOOD!


key = lambda 이해도 높이기

key = lambda는 for문에서 각 데이터를 하나하나 수행하는 것과 비슷한 역할을 한다.

arr = [(0,10),(1,14),(2,2),(3,10)] #1줄
new_arr = max(arr, key=lambda x : x[1]) #2줄

1줄 : arr이라는 튜플로 이루어진 리스트들이 있다.

2줄 :

key=lambda x x로 arr의 리스트를 읽어온다.

: x[1] x의 인덱스 1번을 기준으로 가져옴

즉, 해당 코드는 arr의 튜플 중 인덱스 1번에 해당하는 각 각의 숫자들 중 max값을 가져오는 것이다.

출력값은 가장 큰 인덱스 1번 튜플의 14가 출력 됨.

0개의 댓글