ABOUT ME

Today
Yesterday
Total
  • [python] 파이썬을 이용한 빅 데이터 실습 10 - 데이터 정렬
    Languages/python 2021. 11. 1. 15:09
    반응형

     

     

     

     

     

     

     

     

     

     

     

     

    정렬

     

    어떤 값을 기준으로 어떤 값의 순서를 매기는 행위

     

     

    sort_values()

    데이터의 값을 기준으로 정렬하는 함수

    sort_values()

    로우 인덱스나 컬럼 인덱스들을 정렬해 주는 함수

     

     

     

     

    sort_values() , sort_values() -> 동일한 인자들을 제공

    (by=None,

     axis=0,

     ascending=True,

     inplace=False,

     kind='quicksort',

     na_position='last')

     

     

    by=None : 정렬한 기준 변수 -> 필수지정

     axis=0 : index or columns(default)

     ascending=True : Ture -> 오름차순 , False -> 내림차순

     inplace=False : 정렬 결과를 원본에 반영할 것인지 True -> 반영 Fasle -> 미반영

     kind='quicksort' : 정렬 알고리즘(default)

     na_position='last' : 결측값, 위치('first','last') (default)

     

     

     

    import pandas as pd
    from pandas import Series, DataFrame
    import numpy as np

     

    정렬

    * 데이터 정렬 : sort_values()

     

     

    # 샘플 데이터 생성
    np.random.seed(0)
    df = pd.DataFrame(np.random.randint(50, 100, (5, 6)), 
                      columns=[[2019, 2019, 2019, 2020, 2020, 2020], ['영어','수학', '과학','영어','수학', '과학']], 
                      index = ['Kim','Park','Lee','Jung','Moon'])
    df.index.set_names('학생명', inplace = True)
    df.columns.set_names(['년도','과목'], inplace = True)
    df.loc['Moon', (2019, '과학')] = np.nan

     

     

     

    1) Series 정렬

     

     

    # Series 정렬을 위한 샘플 데이터
    sr = Series([3,5,2,1,7,10], index = list('bcafed'))
    sr

     

    실행결과

     

     

     

    b     3
    c     5
    a     2
    f     1
    e     7
    d    10
    dtype: int64

     

    # 로우 인덱스 라벨의 값으로 정렬
    sr.sort_index()

     

    실행결과

     

    a     2
    b     3
    c     5
    d    10
    e     7
    f     1
    dtype: int64

     

    # Series의 값으로 정렬 (기본값 = 오름차순)
    sr.sort_values()

     

    실행결과

     

    f     1
    a     2
    b     3
    c     5
    e     7
    d    10
    dtype: int64

     

     

    # Series의 값으로 내림차순 정렬
    sr.sort_values(ascending = False)

     

     

    d    10
    e     7
    c     5
    b     3
    a     2
    f     1
    dtype: int64

     

     

    2) DataFrame 정렬

     

    • 2차원 DataFrame 정렬
      • df에서 2020년 데이터만 선택하여 df2020 생성한 후 실습

     

    df2020 = df[2020]

     

     

    # 학생명으로 정렬
    df2020.sort_index(axis = 0)

     

     

     

    실행결과

     

     

    과목	영어	수학	과학
    학생명			
    Jung	67	87	75
    Kim	53	53	89
    Lee	51	88	89
    Moon	70	66	55
    Park	86	73	56

     

     

    # 수학 성적으로 오름차순 정렬
    df2020.sort_values(by = '수학')

     

     

    실행결과

     

     

    
    과목	영어	수학	과학
    학생명			
    Kim	53	53	89
    Moon	70	66	55
    Park	86	73	56
    Jung	67	87	75
    Lee	51	88	89

     

     

    # 실습. 영어 성적의 내림차순 정렬
    df2020.sort_values(by = '영어',ascending = False)

     

     

    실행결과

     

     

     

    과목	영어	수학	과학
    학생명			
    Park	86	73	56
    Moon	70	66	55
    Jung	67	87	75
    Kim	53	53	89
    Lee	51	88	89

     

     

     

     

    • 3차원 데이터 정렬 (계층색인)

     

     

     

    df

     

     

    실행결과

     

     

    년도	2019	2020
    과목	영어	수학	과학	영어	수학	과학
    학생명						
    Kim	94	97	50.0	53	53	89
    Park	59	69	71.0	86	73	56
    Lee	74	74	62.0	51	88	89
    Jung	73	96	74.0	67	87	75
    Moon	63	58	NaN	70	66	55

     

     

    # 2020년 수학 성적 기준으로 내림차순 정렬
    df.sort_values(by = (2020,'수학'),ascending = False)

     

     

    실행결과

     

     

    년도	2019	2020
    과목	영어	수학	과학	영어	수학	과학
    학생명						
    Lee	74	74	62.0	51	88	89
    Jung	73	96	74.0	67	87	75
    Park	59	69	71.0	86	73	56
    Moon	63	58	NaN	70	66	55
    Kim	94	97	50.0	53	53	89

     

     

     

    # 2개 이상의 컬럼으로 정렬하기
    df.sort_values(by = [(2020,'수학'),(2019,'수학')], ascending = [False, True])

     

     

    실행결과

     

     

    
    년도	2019	2020
    과목	영어	수학	과학	영어	수학	과학
    학생명						
    Lee	74	74	62.0	51	88	89
    Jung	73	96	74.0	67	87	75
    Park	59	69	71.0	86	73	56
    Moon	63	58	NaN	70	66	55
    Kim	94	97	50.0	53	53	89

     

     

    # 정렬 결과를 원본에 반영하기 
    df.sort_values(by = (2020, '수학'),ascending = False, inplace = True)

     

     

    실행결과

     

     

    
    년도	2019	2020
    과목	영어	수학	과학	영어	수학	과학
    학생명						
    Lee	74	74	62.0	51	88	89
    Jung	73	96	74.0	67	87	75
    Park	59	69	71.0	86	73	56
    Moon	63	58	NaN	70	66	55
    Kim	94	97	50.0	53	53	89

     

     

     

    반응형

    댓글

Designed by Tistory.