pandasでデータをソートする方法を解説します。
データをソートする
データセット
import pandas as pd
from sklearn.datasets import load_diabetes
data = load_diabetes()
df = pd.DataFrame(
data = data.data,
columns = data.feature_names,
)
df["target"] = data.target
df
load_diavetesのデータを使います。
ソート
df.sort_values("target")
# ===== output =====
# age sex bmi bp s1 s2 s3 s4 s5 s6 target
# 156 -0.016412 -0.044642 -0.010517 0.001215 ... 25
# 297 0.001751 -0.044642 -0.008362 -0.064199 ... 31
# 57 -0.027310 -0.044642 -0.063330 -0.050427 ... 37
sort_valuesでソートできます。今回は”target”で並び替えました。
行番号が156, 297, 57, …と変わっていることがわかりますね。
df.sort_values("target").reset_index(drop = True)
# ===== output =====
# age sex bmi bp s1 s2 s3 s4 s5 s6 target
# 0 -0.016412 -0.044642 -0.010517 0.001215 ... 25
# 1 0.001751 -0.044642 -0.008362 -0.064199 ... 31
# 2 -0.027310 -0.044642 -0.063330 -0.050427 ... 37
reset_indexをすると行番号が0から振り直しされます。
ぐちゃぐちゃのままだとエラーのもとになるので、基本的にリセットすると良いです。
df.sort_values("target", ascending = False).reset_index(drop = True)
# ===== output =====
# age sex bmi bp s1 s2 s3 s4 s5 s6 target
# 0 -0.049105 -0.044642 0.160855 -0.046985 ... 346.0
# 1 0.034443 0.050680 0.125287 0.028758 ... 341.0
# 2 0.034443 0.050680 0.111276 0.076958 ... 336.0
“ascending = False”にすると、降順(大きい順)になります。
デフォルトはTrueで、昇順(小さい順)です。
df.sort_values(["age", "target"], ascending = [True, False]).reset_index(drop = True)
# ===== output =====
# age sex bmi bp s1 s2 s3 s4 s5 s6 target
# 0 -0.107226 -0.044642 -0.011595 -0.040099 ... 200.0
# 1 -0.107226 -0.044642 -0.034229 -0.067642 ... 140.0
# 2 -0.107226 -0.044642 -0.077342 -0.026328 ... 137.0
このようにリストで囲むと、複数の列に対してソートをかけることができます。
“ascending”もリストで渡して各列の大小条件を決めることも可能です。
まとめ
今回はpandasでソートをする方法を解説しました。
データの前処理をしたり中身を理解する際に便利ですね。
コメント