並べ替える
このレッスンでできるようになること。行を昇順や降順に並べ替えて、上位や下位を見られるようになります。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 で入れる
入出力例
top_sales("売上日,店舗,商品名,カテゴリ,数量,金額
2026-01-05,渋谷店,白磁のマグカップ,食器,2,3600
2026-01-06,横浜店,鉄のフライパン,調理器具,1,7800
2026-01-07,大宮店,積み重ね収納ボックス,収納,3,4500
2026-01-08,渋谷店,木製カッティングボード,調理器具,1,4200
2026-01-09,横浜店,白磁のマグカップ,食器,4,7200
2026-02-03,渋谷店,鋳物ホーロー鍋,調理器具,1,16800
2026-02-04,大宮店,白磁のマグカップ,食器,5,9000
2026-02-05,渋谷店,布製収納バスケット,収納,2,3000
") → {"products":["鋳物ホーロー鍋","白磁のマグカップ","鉄のフライパン"],"total":33600}
top_sales("売上日,店舗,商品名,カテゴリ,数量,金額
2026-01-05,渋谷店,白磁のマグカップ,食器,2,3600
2026-01-06,横浜店,鉄のフライパン,調理器具,1,7800
2026-01-07,大宮店,積み重ね収納ボックス,収納,3,4500
2026-01-08,渋谷店,木製カッティングボード,調理器具,1,4200
") → {"products":["鉄のフライパン","積み重ね収納ボックス","木製カッティングボード"],"total":16500}