Pandasのsort_values()
メソッドについて詳しく解説します。
これはデータフレームやシリーズを「値に基づいて並び替える」ためのメソッドです。
sort_index()
がインデックスを基準に並べ替えるのに対して、sort_values()
は「列や行の値」を基準に並べ替える点が大きな違いです。
目次
基本構文
import pandas as pd
# 基本構文
"""
DataFrame.sort_values(
by,
axis=0,
ascending=True,
inplace=False,
kind='quicksort',
na_position='last',
ignore_index=False,
key=None
)
"""
主な引数と意味
by
- 並び替えの基準となる列または行を指定します。
axis=0
の場合 → 列名を指定axis=1
の場合 → 行名を指定- 複数の列をリストで指定可能。
df = pd.DataFrame({
"name": ["Alice", "Bob", "Charlie"],
"age": [25, 30, 20],
"salary": [500, 700, 400]
})
# 単一列でソート
print(df.sort_values(by="age"))
# 複数列でソート
print(df.sort_values(by=["age", "salary"]))
axis
0
(デフォルト):行方向に並び替え(列の値を基準に)1
:列方向に並び替え(行の値を基準に)
# 行方向(デフォルト, axis=0)
print(df.sort_values(by="age", axis=0))
ascending
- 昇順(小さい順)か降順(大きい順)を指定。
- デフォルトは
True
(昇順)。 - リストを指定すると列ごとに昇順・降順を切り替え可能。
# 昇順(デフォルト)
print(df.sort_values(by="salary", ascending=True))
# 降順
print(df.sort_values(by="salary", ascending=False))
# 複数列で異なる並び順を指定
print(df.sort_values(by=["age", "salary"], ascending=[True, False]))
inplace
True
にすると元のDataFrameを直接変更。- デフォルトは
False
(新しいDataFrameを返す)。
# 新しいDataFrameを返す(元は変更されない)
sorted_df = df.sort_values(by="age")
print(sorted_df)
# 元のdfを直接変更
df.sort_values(by="age", inplace=True)
print(df)
kind
- ソートのアルゴリズムを指定。
"quicksort"
(デフォルト):高速"mergesort"
:安定ソート(順序を保つ)"heapsort"
:特殊用途
安定ソートが必要なとき(例えば並び替え後も同じ値同士の順序を保持したい場合)は "mergesort"
を選ぶ。
# デフォルトは "quicksort"
print(df.sort_values(by="salary", kind="quicksort"))
# 順序を保ちたいときは "mergesort"
print(df.sort_values(by="salary", kind="mergesort"))
na_position
- NaN の並び順を指定。
"last"
(デフォルト):最後に並べる"first"
:最初に並べる
df_nan = pd.DataFrame({
"name": ["Alice", "Bob", "Charlie", "Dave"],
"salary": [500, None, 400, None]
})
# NaNを最後に
print(df_nan.sort_values(by="salary", na_position="last"))
# NaNを最初に
print(df_nan.sort_values(by="salary", na_position="first"))
ignore_index
- 並び替え後にインデックスを振り直すかどうか。
True
にすると、結果のインデックスが0, 1, 2, ...
にリセットされる。
# 並べ替え後も元のインデックスを保持
print(df.sort_values(by="age", ignore_index=False))
# 並べ替え後にインデックスを振り直す
print(df.sort_values(by="age", ignore_index=True))
key
- 並び替え前に列の値を変換する関数を指定可能。
- 例えば文字列を小文字に変換してからソートするなど。
df_str = pd.DataFrame({
"name": ["Alice", "bob", "Charlie"],
"age": [25, 30, 20]
})
# 大文字小文字を無視してソート
print(df_str.sort_values(by="name", key=lambda x: x.str.lower()))
sort_index()
との違い
sort_values()
→ 値を基準に並び替えsort_index()
→ インデックスを基準に並び替え
例えば、データを「名前順」や「日付順」に並べ替えたいときは sort_values()
を使う。
df_index = pd.DataFrame({
"value": [100, 200, 300]
}, index=["c", "a", "b"])
# 値でソート
print(df_index.sort_values(by="value"))
# インデックスでソート
print(df_index.sort_index())
まとめ
- 基本は
by
に基準の列を指定し、ascending
で順序を決める。 - 複数列やNaN処理、安定ソートなど細かく制御できる。
sort_index()
と区別して使うと理解しやすい。
以上、PythonのPandasのsort valueメソッドについてでした。
最後までお読みいただき、ありがとうございました。