파이썬(Python)/pandas

[Python] Pandas 여러가지 정렬방법(Multi Column, Index 제외 정렬 등)

끄적끄적아무거나 2022. 2. 24. 18:22
반응형

 

목차

     

     

     

     

     

     

     

     

    Python Pandas 정렬(Sorting)

     

    파이썬의 판다스를 이용해서 정렬을 하려고 합니다. 엑셀에서 정렬을 해보시면 아시겠지만 열을 하나만 선택하거나 두개를 선택해서 정렬하거나 다양한 방법들이 있습니다.

     

    이번 포스트는 index 사용 정렬이 아닌 column 관련 정렬로 sort_values 함수를 사용해서 정렬할 것입니다.

     

    아래 예제 실습을 통해 사용 방법을 익혀보겠습니다.

     

     

    기본 Column 하나로 정렬하기

     

    예제 코드>>

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({
        "name" : ["James", "James", "Kevin", "Adam", np.nan],
        "math" : [90,50,50,30,100],
        "physics" : [30,40,80,50,10],
        "english" : [90,70,30,90,90]
    })
    
    print("Origial Dataframe")
    print(df)
    
    sorted_df = df.sort_values(by=["name"])
    print("\nSorted Dataframe")
    print(sorted_df)

    4~9번 라인: Dataframe으로 배열(Matrix)값을 입력 합니다. 

    14번 라인: name 값을 기준으로 정렬(Sort) 합니다.

     

     

    결과>>

    Origial Dataframe
        name  math  physics  english
    0  James    90       30       90
    1  James    50       40       70
    2  Kevin    50       80       30
    3   Adam    30       50       90
    4    NaN   100       10       90
    
    Sorted Dataframe
        name  math  physics  english
    3   Adam    30       50       90
    0  James    90       30       90
    1  James    50       40       70
    2  Kevin    50       80       30
    4    NaN   100       10       90

    이름별로 정렬되었습니다. Index 번호도 같이 정렬에 맞춰 변경 되었습니다.

     

     

     

    Column 두개로 순차적으로 정렬하기

     

    Column값을 여러개를 사용해서 순차적으로 정렬하는 것이 가능 합니다.

     

    예제 코드>>

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({
        "name" : ["James", "James", "Kevin", "Adam", np.nan],
        "math" : [90,50,50,30,100],
        "physics" : [30,40,80,50,10],
        "english" : [90,70,30,90,90]
    })
    
    print("Origial Dataframe")
    print(df)
    
    sorted_df = df.sort_values(by=["name", "math"])
    print("\nSorted Dataframe")
    print(sorted_df)

    14번 라인: 2개의 Column을 사용해서 정렬 합니다.

     

     

    결과>>

    Origial Dataframe
        name  math  physics  english
    0  James    90       30       90
    1  James    50       40       70
    2  Kevin    50       80       30
    3   Adam    30       50       90
    4    NaN   100       10       90
    
    Sorted Dataframe
        name  math  physics  english
    3   Adam    30       50       90
    1  James    50       40       70
    0  James    90       30       90
    2  Kevin    50       80       30
    4    NaN   100       10       90

    동일 James 중에 math가 다시 순차적으로 정렬 하였습니다.

     

     

     

     

    Index 값 제외하고 정렬하기

    앞서 예제에서 볼 수 있듯이 정렬을 하면 index 값도 같이 바뀝니다. 이번에는 옵션 값을 넣어서 index는 섞이지 않게 하겠습니다.

     

    예제 코드>>

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({
        "name" : ["James", "James", "Kevin", "Adam", np.nan],
        "math" : [90,50,50,30,100],
        "physics" : [30,40,80,50,10],
        "english" : [90,70,30,90,90]
    })
    
    print("Origial Dataframe")
    print(df)
    
    sorted_df = df.sort_values(by=["name"], ignore_index=True)
    print("\nSorted Dataframe")
    print(sorted_df)

    14번 라인: ignore_index 를 사용해서 index 정렬을 막습니다.

     

    결과>>

    Origial Dataframe
        name  math  physics  english
    0  James    90       30       90
    1  James    50       40       70
    2  Kevin    50       80       30
    3   Adam    30       50       90
    4    NaN   100       10       90
    
    Sorted Dataframe
        name  math  physics  english
    0   Adam    30       50       90
    1  James    90       30       90
    2  James    50       40       70
    3  Kevin    50       80       30
    4    NaN   100       10       90

     

     

     

    내림 차순/오름 차순 정렬 하기

     

    이번에는 정렬 방법을 바꾸도록 하겠습니다. ascending 값을 false 로 지정해서 내림차순으로 변경합니다. default는 오름 차순입니다.

     

    예제 코드>>

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({
        "name" : ["James", "James", "Kevin", "Adam", np.nan],
        "math" : [90,50,50,30,100],
        "physics" : [30,40,80,50,10],
        "english" : [90,70,30,90,90]
    })
    
    print("Origial Dataframe")
    print(df)
    
    sorted_df = df.sort_values(by=["name"], ascending=False)
    print("\nSorted Dataframe")
    print(sorted_df)

    14번 라인: 오름/내림 설정

     

    결과>>

    Origial Dataframe
        name  math  physics  english
    0  James    90       30       90
    1  James    50       40       70
    2  Kevin    50       80       30
    3   Adam    30       50       90
    4    NaN   100       10       90
    
    Sorted Dataframe
        name  math  physics  english
    2  Kevin    50       80       30
    0  James    90       30       90
    1  James    50       40       70
    3   Adam    30       50       90
    4    NaN   100       10       90

     

     

     

    빈값(numpy.nan)을 앞에 배치하여 정렬하기

     

    예제 코드>>

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({
        "name" : ["James", "James", "Kevin", "Adam", np.nan],
        "math" : [90,50,50,30,100],
        "physics" : [30,40,80,50,10],
        "english" : [90,70,30,90,90]
    })
    
    print("Origial Dataframe")
    print(df)
    
    sorted_df = df.sort_values(by=["name"], na_position='first')
    print("\nSorted Dataframe")
    print(sorted_df)

    14번 라인: na_position 옵션을 사용해서 빈값을 첫번째로 정렬되게 만듭니다.

     

    결과>>

    Origial Dataframe
        name  math  physics  english
    0  James    90       30       90
    1  James    50       40       70
    2  Kevin    50       80       30
    3   Adam    30       50       90
    4    NaN   100       10       90
    
    Sorted Dataframe
        name  math  physics  english
    4    NaN   100       10       90
    3   Adam    30       50       90
    0  James    90       30       90
    1  James    50       40       70
    2  Kevin    50       80       30

     

     

     

     

     

     

     

     

     

     

    반응형