sort_values:列を基準にしたソート

データ分析では、データを並べ替えて確認したり処理したりしたい場面があります。
たとえば、次のようなケースです。

  • 顧客のデータを、総購入金額が高い順で並べ替えて確認する
  • 毎日の売上のデータを、日付が新しい順で並べ替えて確認する
  • 試験結果のデータを、点数が高い順で並べ替えて確認する

DataFrameを指定した列でソートするには下記のようにします(dfはDataFrame)。

df.sort_values(列名)

具体例で確認しましょう。

以下は、あなたが処理すべきタスクの一覧とします。

TaskNameWorkTimeLimitDate
0資料ABC確認1.52022-04-11
1資料XYZ確認0.52022-04-01
2報告書まとめ1.52022-04-05
3本社ミーティング4.02022-04-04
4出張報告書の提出1.02022-04-05

各列は下記の通りです。

  • TaskName:タスク名
  • WorkTime:タスクを処理するのにかかる時間
  • LimitDate:タスクの締め切り日

なお、読み込み時に、列LimitDateは日付時刻型に変換しているとします。

LimitDateでソートした結果は、以下のようになります。

df.sort_values("LimitDate")
TaskNameWorkTimeLimitDate
1資料XYZ確認0.52022-04-01
3本社ミーティング4.02022-04-04
2報告書まとめ1.52022-04-05
4出張報告書の提出1.02022-04-05
0資料ABC確認1.52022-04-11

デフォルトでは、昇順にソートします。降順にソートするにはascending=Falseをつけます。
また、inplace=Truedf自体を変更します。
具体例は写経で確認します。

Seriesでもsort_values()が使えます。たとえば、列LimitDateをソートするには、下記のようにします。

df.LimitDate.sort_values()

実行結果

1   2022-04-01
3   2022-04-04
2   2022-04-05
4   2022-04-05
0   2022-04-11
Name: LimitDate, dtype: datetime64[ns]

演習

処理すべきタスク一覧を読み込みます。In [1]:

import pandas as pd

df = pd.read_csv("dataset/task.csv", parse_dates=["LimitDate"], encoding="utf-8")
df

Out[1]:

TaskNameWorkTimeLimitDate
0資料ABC確認1.52022-04-11
1資料XYZ確認0.52022-04-01
2報告書まとめ1.52022-04-05
3本社ミーティング4.02022-04-04
4出張報告書の提出1.02022-04-05

このデータは、タスクの登録順に並んでいるため締め切りの日付はバラバラです。 ここでは締め切りの早い順に確認したいとします。 列LimitDateでソートすればよいので、df.sort_values(“LimitDate”)を使います。日付順に変わることが確認できます。In [2]:

df.sort_values("LimitDate")

Out[2]:

TaskNameWorkTimeLimitDate
1資料XYZ確認0.52022-04-01
3本社ミーティング4.02022-04-04
2報告書まとめ1.52022-04-05
4出張報告書の提出1.02022-04-05
0資料ABC確認1.52022-04-11

降順にソートしたい場合は、ascending=Falseをつけます。In [3]:

df.sort_values("LimitDate", ascending=False)

Out[3]:

TaskNameWorkTimeLimitDate
0資料ABC確認1.52022-04-11
2報告書まとめ1.52022-04-05
4出張報告書の提出1.02022-04-05
3本社ミーティング4.02022-04-04
1資料XYZ確認0.52022-04-01

ソート結果は一時的なオブジェクトです。df自体は変更されていません。もう一度dfを確認すると、元の順番のままであることが確認できます。In [4]:

df

Out[4]:

TaskNameWorkTimeLimitDate
0資料ABC確認1.52022-04-11
1資料XYZ確認0.52022-04-01
2報告書まとめ1.52022-04-05
3本社ミーティング4.02022-04-04
4出張報告書の提出1.02022-04-05

sort_values()inplace=Trueをつけることで元のDataFrameを変更できます。

df.sort_values("LimitDate", inplace=True)
df
TaskNameWorkTimeLimitDate
1資料XYZ確認0.52022-04-01
3本社ミーティング4.02022-04-04
2報告書まとめ1.52022-04-05
4出張報告書の提出1.02022-04-05
0資料ABC確認1.52022-04-11

sort_values()は、Seriesでも使えます。下記は列WorkTimeをソートした結果です。

df.WorkTime.sort_values()
1    0.5
4    1.0
2    1.5
0    1.5
3    4.0
Name: WorkTime, dtype: float64

コメント

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