並べ替える
このレッスンでできるようになること。行を昇順や降順に並べ替えて、上位や下位を見られるようになります。SQL の ORDER BY にあたる操作です。
売上額の大きい順に並べれば、どの取引が大きかったかがすぐ分かります。SQL では次のように書きます。
SQL クエリ
SELECT * FROM sales ORDER BY 金額 DESC;pandas では sort_values を使います。
Python
import pandas as pd
df = pd.read_csv("sales.csv")
ranked = df.sort_values("金額", ascending=False)第1引数が並べ替えの基準になる列名です。ascending は昇順かどうかで、既定は True の昇順です。大きい順に見たいときは False にします。SQL の DESC にあたります。
複数の列で並べ替えるときはリストで渡します。df.sort_values(["店舗", "金額"], ascending=[True, False]) なら、店舗名の昇順でまとめつつ、店舗の中では金額の大きい順になります。ascending も列と同じ数だけリストで渡せます。SQL の ORDER BY 店舗 ASC, 金額 DESC と同じ意味です。
並べ替えてもインデックスは元の番号のまま付いてきます。上位から順に 0, 1, 2 と振り直したいときは reset_index(drop=True) を続けます。drop=True を付けないと、古いインデックスが列として残ってしまいます。
上位の何件かだけが欲しいときは head() をつなげます。df.sort_values("金額", ascending=False).head(3) で売上額トップ3になります。SQL の LIMIT と同じ考え方です。
sort_values も元の df を変えません。並べ替えた新しい表が返るだけなので、使い続けたいなら変数に入れてください。この演習では、金額の大きい順に並べてトップ3の商品名を取り出します。
要件
- sort_values で金額の降順に並べ替える
- head(3) で上位3件に絞る
- products にその商品名のリストを入れる
- total に3件の金額の合計を int で入れる