ㅅㅇ

Pandas _ 03-1 정렬 본문

AI_STUDY/Pandas

Pandas _ 03-1 정렬

SO__OS 2022. 6. 9. 23:27
플레이데이터 빅데이터캠프 공부 내용 _ 6/9

Pandas_03_1  정렬

1. 정렬 _ index명 / 컬럼명 을 순 정렬

     현재 DF의 값이 기준이 아니라, index 와 컬럼 자체를 이름(유니코드)로 정렬하는 것. 

    sort_index(axis, ascending=True)

    - axis
        - index명 기준 정렬(행) : 'index' 또는 0 (기본값)
        - columnm 명 기준 정렬(열) : 'columns' 또는 1
            - 컬럼명이 정렬됨. 거의 안 함.
    - ascending
        - 정렬방식
        - True(기본): 오름차순, False: 내림차순
    - inplace
        - 원본에 적용 여부
        - False(기본): 변경한 복사본 반환 
        - True : 원본을 변경

 

- 인덱스명 정렬 : 거의 이 용도.

# (default) axis = 0, ascending = 오름차순
df.sort_index()

# 내림차순
df.sort_index(ascending = False)

 

- 컬럼명 정렬

# 컬럼명 정렬
df.sort_index(axis = 1)

 

- 정렬 후 원하는 처리 가능 : 메소드 체인

# A~B 까지 조회. -> 정렬 후 슬라이싱 
# df.sort_index() : 정렬된 데이터프레임

# A로 시작하는 영화 ~ C로 시작하는 영화 앞까지 범위로 조회
df.sort_index().loc['A':'C','color':'duration']

 

2. 특정 컬럼의 값을 기준으로 행을 정렬

sort_values(by, ascending, inplace)

 

    - by
        - 정렬기준 컬럼명
        - 해당 컬럼을 기준으로 행을 정렬한다.
        - 여러 컬럼에 대해 정렬할 경우 리스트에 담아 전달
    - ascending
        - 정렬방식
        - True(기본): 오름차순, False: 내림차순
        - 여러컬럼에 대해 정렬할 경우 정렬방식도 리스트에 담아 전달
    - inplace
        - 원본에 적용 여부
        - False(기본): 변경한 복사본 반환 
        - True : 원본을 변경


    - 결측치는 방식과 상관없이 마지막에 나온다.

 

(1) 1차 정렬 오름차순, 내림차순 

# director_name을 기준으로 행 정렬 (오름차순)
df.sort_values("director_name")   # order by director_name


# director_name을 기준으로 행 정렬 (내림차순)
df.sort_values("director_name", ascending=False) # order by director_name desc

 

(2) n차 정렬 => list에 묶어서.   둘 다 오름차순.

# order by duration, imdb_score : duration 정렬 후 imdb_score 정렬
# duration 이 같은 값들 중 또 다른 기준컬럼으로 정렬하겠다.
df.sort_values(['duration', 'imdb_score']) # 둘 다 오름차순

 

(3) n차 정렬할 때 각 컬럼마다 정렬방식이 다를 때 

      => ascending 설정에서도 순서대로 리스트에 넣어주면 된다.

df.sort_values(['duration', 'imdb_score'], ascending = [True, False]) # 오름. 내림

 

 

★ 메소드 체인 :  행 조건, 정렬 등 여러 작업이 이어져서 하나의 구문으로 가능하다.
    - 그렇게 되는 이유는? 한 작업 결과가 데이터프레임 (또는 Series)이기 때문이다. 
    - 나온 결과 DF를 또 처리하고 그 결과 DF 에 대해 또 처리하고 이어서 가능.

    => 배운 조회(인덱싱, 슬라이싱, 펜시 ...원하는 컬럼, 인덱스만), 행 조건, 그룹, 집계 등등 처리를 하나의 구문으로 이어서 작성 가능한 것.

 

# 메소드 체인 
# 정렬한 결과 데이터프레임에서 또 원하는 컬럼만 조회한다던지. 상위 10개만 보여달라던지 등 처리를 해주었다.
df[df['duration']>250].sort_values('director_name').head(10)

df[df['duration']>250].sort_values('director_name')[['director_name', 'duration']]