スポンサーリンク

[Pandas]データをソートする

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でソートをする方法を解説しました。
データの前処理をしたり中身を理解する際に便利ですね。

コメント

タイトルとURLをコピーしました