【Python】pandas:3種類のカラムでソート

■概要

以下の表データをpandasで読み取り、「START」、「KIND」、「END」について3種類のソートを行う。

KINDSTARTEND
a13
a23
b11
a42
c12
b13
a31
c23
b52
c33

▼START(昇順)、KIND(昇順)、END(昇順)の期待値

KINDSTARTEND
a13
b11
b13
c12
a23
c23
a31
c33
a42
b52

▼START(降順)、KIND(降順)、END(降順)の期待値

KINDSTARTEND
b52
a42
c33
a31
c23
a23
c12
b13
b11
a13

▼KIND(昇順)、START(昇順)、END(降順)の期待値

KINDSTARTEND
a13
a23
a31
a42
b13
b11
b52
c12
c23
c33

■サンプルコード

サンプルコードを以下に示す。

import pandas as pd

DATA_LIST = [
    ['a', 1, 3]
    , ['a', 2, 3]
    , ['b', 1, 1]
    , ['a', 4, 2]
    , ['c', 1, 2]
    , ['b', 1, 3]
    , ['a', 3, 1]
    , ['c', 2, 3]
    , ['b', 5, 2]
    , ['c', 3, 3]
]

COLUMN_NAME_LIST = ['KIND', 'START', 'END']


if __name__ == '__main__':
    df = pd.DataFrame(DATA_LIST, columns=COLUMN_NAME_LIST, index=None)
    
    print('初期値')
    print(df)
    print('**********')
    
    # START -> KIND -> ENDの順番でソート
    # True:昇順
    df_1 = df.sort_values(['START', 'KIND', 'END'], ascending=[True, True, True])
    
    print('START -> KIND -> ENDの順番でソート(昇順)')
    print(df_1)
    print('**********')

    # START -> KIND -> ENDの順番でソート
    # FALSE:降順
    df_2 = df.sort_values(['START', 'KIND', 'END'], ascending=[False, False, False])
    
    print('START -> KIND -> ENDの順番でソート(降順)')
    print(df_2)
    print('**********')

    # KIND -> START -> ENDの順番でソート
    df_3 = df.sort_values(['KIND', 'START', 'END'], ascending=[True, True, False])
    
    print('KIND(昇順) -> START(昇順) -> END(降順)の順番でソート')
    print(df_3)
    print('**********')

■実行結果

「■サンプルコード」にて記載したコードの実行結果を以下に示す。

初期値
  KIND  START  END
0    a      1    3
1    a      2    3
2    b      1    1
3    a      4    2
4    c      1    2
5    b      1    3
6    a      3    1
7    c      2    3
8    b      5    2
9    c      3    3
**********
START -> KIND -> ENDの順番でソート(昇順)
  KIND  START  END
0    a      1    3
2    b      1    1
5    b      1    3
4    c      1    2
1    a      2    3
7    c      2    3
6    a      3    1
9    c      3    3
3    a      4    2
8    b      5    2
**********
START -> KIND -> ENDの順番でソート(降順)
  KIND  START  END
8    b      5    2
3    a      4    2
9    c      3    3
6    a      3    1
7    c      2    3
1    a      2    3
4    c      1    2
5    b      1    3
2    b      1    1
0    a      1    3
**********
KIND(昇順) -> START(昇順) -> END(降順)の順番でソート
  KIND  START  END
0    a      1    3
1    a      2    3
6    a      3    1
3    a      4    2
5    b      1    3
2    b      1    1
8    b      5    2
4    c      1    2
7    c      2    3
9    c      3    3
**********

■参考URL

本記事作成にあたり、参考とさせていただいたURLを以下に記載する。

タイトルとURLをコピーしました