Pandas DataFrame を 1つの列の値で並べ替える方法
    
    
            Asad Riaz
    2023年1月30日
    
    Pandas
    Pandas DataFrame
    
DataFrame 値をソートするための pandas.DataFrame.sort_values 方法を紹介します。および並べ替え順序を指定する ascending のようなオプションと、並べ替えられた結果での NaN の位置を決定するの na_position を紹介します。
ADVERTISEMENT
次の DataFrame について考えてみましょう。
Python
 pythonCopyimport pandas as pd
df = pd.DataFrame(
    {
        "col1": ["g", "t", "n", "w", "n", "g"],
        "col2": [5, 2, 5, 1, 3, 6],
        "col3": [0, 7, 2, 8, 1, 2],
    }
)
print(df)
このコードを実行すると、次のような出力が得られますが、まだソートされていません。
 blankCopy    col1  col2  col3
0    g     5     0
1    t     2     7
2    n     5     2
3    w     1     8
4    n     3     1
5    g     6     2
これで、以下のコードで DataFrame を並べ替えることができます。
Python
 pythonCopyimport pandas as pd
df = pd.DataFrame(
    {
        "col1": ["g", "t", "n", "w", "n", "g"],
        "col2": [5, 2, 5, 1, 3, 6],
        "col3": [0, 7, 2, 8, 1, 2],
    }
)
print(df.sort_values(by=["col1"]))
DataFrame を col1 で並べ替えます。上記のコードを実行すると、次の出力が得られます。
 blankCopy    col1  col2  col3
0    g     5     0
5    g     6     2
2    n     5     2
4    n     3     1
1    t     2     7
3    w     1     8
並べ替えに複数の列を使用することもできます。上記のコードの最後の行を次のように変更してみましょう。
Python
 pythonCopyprint(df.sort_values(by=["col1", "col2"]))
コードを実行すると、次の出力が得られます。
 blankCopy    col1  col2  col3
0    g     5     0
5    g     6     2
4    n     3     1
2    n     5     2
1    t     2     7
3    w     1     8
これで、DataFrame も col2 によってさらにソートされます。
DataFrame 並べ替え順序-引数 ascending
デフォルトでは、並べ替えは昇順です。DataFrame を降順に並べ替えるには、引数 ascending=False を設定する必要があります。
Python
 pythonCopyprint(df.sort_values(by=["col1", "col2"], ascending=False))
コードを実行すると、次の出力が得られます。
 blankCopy    col1  col2  col3
3    w     1     8
1    t     2     7
2    n     5     2
4    n     3     1
5    g     6     2
0    g     5     0
    
DataFrame 並べ替え順序-引数 na_position
na_position は、ソート後の NaN の位置を指定します。つまり、last は最後に NaN を配置します。デフォルト値は first で、ソートされた結果の最初に NaN を置きます。
次の DataFrame について考えてみましょう。
Python
 pythonCopyimport numpy as np
import pandas as pd
s = pd.Series([np.nan, 2, 4, 10, 7])
print(s.sort_values(na_position="last"))
コードを実行すると、次の出力が得られます。
 textCopy1 2.0
2 4.0
4 7.0
3 10.0
0 NaN
        チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe
    
