Pandas DataFrame を 1つの列の値で並べ替える方法
Asad Riaz
2023年1月30日
DataFrame
値をソートするための pandas.DataFrame.sort_values
方法を紹介します。および並べ替え順序を指定する ascending
のようなオプションと、並べ替えられた結果での NaN
の位置を決定するの na_position
を紹介します。
次の DataFrame
について考えてみましょう。
import 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)
このコードを実行すると、次のような出力が得られますが、まだソートされていません。
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
を並べ替えることができます。
import 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
で並べ替えます。上記のコードを実行すると、次の出力が得られます。
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
並べ替えに複数の列を使用することもできます。上記のコードの最後の行を次のように変更してみましょう。
print(df.sort_values(by=["col1", "col2"]))
コードを実行すると、次の出力が得られます。
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
を設定する必要があります。
print(df.sort_values(by=["col1", "col2"], ascending=False))
コードを実行すると、次の出力が得られます。
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
について考えてみましょう。
import numpy as np
import pandas as pd
s = pd.Series([np.nan, 2, 4, 10, 7])
print(s.sort_values(na_position="last"))
コードを実行すると、次の出力が得られます。
1 2.0
2 4.0
4 7.0
3 10.0
0 NaN