PythonのPandasのsort valueメソッドについて

Python,イメージ

AI実装検定のご案内

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メソッドについてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次