Pandas DataFrame を 1つの列の値で並べ替える方法

  1. Dataframe 並べ替え順序-引数 ascending
  2. dataframe 並べ替え順序-引数 na_position

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']))

dataframecol1 で並べ替えます。上記のコードを実行すると、次の出力が得られます。

    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

これで、dataframecol2 によってさらにソートされます。

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

関連記事 - Pandas DataFrame

  • Pandas DataFrame で空の列を作成する方法
  • Pandas DataFrame で列の名前を変更する方法
  • comments powered by Disqus