今回は、Pythonのデータ分析ライブラリ「Pandas」で、データフレームの並び替え(sort)方法について解説します。
1. サンプルデータの作成
import pandas as pd
df = pd.DataFrame({
"名前": ["太郎", "花子", "次郎", "美香", "健一", "恵子", "翔", "茜", "隆", "葵"],
"年齢": [23, 29, 35, 42, 18, 33, 27, 24, 31, 30],
"職業": ["エンジニア", "デザイナー", "教師", "医師", "学生", "看護師", "プログラマー", "販売員", "弁護士", "研究者"],
"年収(円)": [4500000, 5500000, 4900000, 7300000, 0, 4000000, 6000000, 3200000, 8000000, 5800000],
"居住地": ["東京", "大阪", "名古屋", "札幌", "福岡", "東京", "神戸", "仙台", "横浜", "千葉"],
"勤続年数": [2, 4, 10, 15, 1, 5, 3, 1, 12, 8]
})
df
出力結果:
インデックス | 名前 | 年齢 | 職業 | 年収(円) | 居住地 | 勤続年数 |
---|---|---|---|---|---|---|
0 | 太郎 | 23 | エンジニア | 4500000 | 東京 | 2 |
1 | 花子 | 29 | デザイナー | 5500000 | 大阪 | 4 |
2 | 次郎 | 35 | 教師 | 4900000 | 名古屋 | 10 |
3 | 美香 | 42 | 医師 | 7300000 | 札幌 | 15 |
4 | 健一 | 18 | 学生 | 0 | 福岡 | 1 |
5 | 恵子 | 33 | 看護師 | 4000000 | 東京 | 5 |
6 | 翔 | 27 | プログラマー | 6000000 | 神戸 | 3 |
7 | 茜 | 24 | 販売員 | 3200000 | 仙台 | 1 |
8 | 隆 | 31 | 弁護士 | 8000000 | 横浜 | 12 |
9 | 葵 | 30 | 研究者 | 5800000 | 千葉 | 8 |
2. インデックス順に並び替え(sort_index)
# インデックスを昇順にソート
df.sort_index()
※この場合、もともと昇順なので結果は変わりません。
インデックスを降順にする
# インデックスを降順にソート
df.sort_index(ascending=False)
出力結果:
インデックス | 名前 | 年齢 | 職業 | 年収(円) | 居住地 | 勤続年数 |
---|---|---|---|---|---|---|
9 | 葵 | 30 | 研究者 | 5800000 | 千葉 | 8 |
8 | 隆 | 31 | 弁護士 | 8000000 | 横浜 | 12 |
7 | 茜 | 24 | 販売員 | 3200000 | 仙台 | 1 |
6 | 翔 | 27 | プログラマー | 6000000 | 神戸 | 3 |
5 | 恵子 | 33 | 看護師 | 4000000 | 東京 | 5 |
4 | 健一 | 18 | 学生 | 0 | 福岡 | 1 |
3 | 美香 | 42 | 医師 | 7300000 | 札幌 | 15 |
2 | 次郎 | 35 | 教師 | 4900000 | 名古屋 | 10 |
1 | 花子 | 29 | デザイナー | 5500000 | 大阪 | 4 |
0 | 太郎 | 23 | エンジニア | 4500000 | 東京 | 2 |
3. 値で並び替え(sort_values)
# "居住地"を降順に並び替え
df.sort_values(by='居住地', ascending=False)
出力結果:
インデックス | 名前 | 年齢 | 職業 | 年収(円) | 居住地 | 勤続年数 |
---|---|---|---|---|---|---|
3 | 美香 | 42 | 医師 | 7300000 | 札幌 | 15 |
2 | 次郎 | 35 | 教師 | 4900000 | 名古屋 | 10 |
5 | 恵子 | 33 | 看護師 | 4000000 | 東京 | 5 |
8 | 隆 | 31 | 弁護士 | 8000000 | 横浜 | 12 |
9 | 葵 | 30 | 研究者 | 5800000 | 千葉 | 8 |
1 | 花子 | 29 | デザイナー | 5500000 | 大阪 | 4 |
6 | 翔 | 27 | プログラマー | 6000000 | 神戸 | 3 |
7 | 茜 | 24 | 販売員 | 3200000 | 仙台 | 1 |
0 | 太郎 | 23 | エンジニア | 4500000 | 東京 | 2 |
4 | 健一 | 18 | 学生 | 0 | 福岡 | 1 |
筆者の体験談:sortでハマった失敗と改善策
初めてsort_values
を使ったとき、私は次のように複数列を並び替えようとして、うまく動作しないことがありました。
# 誤り:列名を文字列で1つだけ渡していたつもりが意図が伝わっていなかった
# 想定では名前で昇順・年収で降順にしたかった
# 正しくはリストと辞書で複数指定する必要があった
# 改善後:
df.sort_values(by=['名前', '年収(円)'], ascending=[True, False])
また、sort_index()
とsort_values()
を混同して、思ったように値のソートができず、「あれ?インデックスが変わらない?」と混乱した経験もあります。
改善策: 並び替えたい「対象」がインデックスか列かを明確に区別するようにしました。
「index → sort_index」「値 → sort_values」とメモしてIDEの横に貼ったのが意外と効果的でした。
ソートは簡単なようで、細かい指定方法の違いで戸惑うこともあります。小さな違和感を大切にして調べる習慣が大切です。
▶️ sort_indexやsort_valuesの公式ドキュメントも参考にしてください:
pandas DataFrame sort_index Documentation
pandas DataFrame sort_values Documentation
まとめ
sort_index()
:インデックス順に並び替えるsort_values(by='列名')
:指定した列の値で並び替える- 昇順(ascending=True)、降順(ascending=False)を切り替えられる
次回予告
次回は、データフレームを結合(concat)について、わかりやすく解説していきます!
コメント