つくる:抽出レポート
このレッスンでできるようになること。列の選択、条件抽出、並べ替えをつないで、1枚の抽出レポートを作れるようになります。
新しい知識は出てきません。2章で覚えた道具を、実務の順番でつなぎます。
分析の現場で「高額売上トップ10を出してほしい」と言われたら、次の順番で手を動かします。絞る、並べる、選ぶ、整えるの4つです。
まず絞ります。1万円以上、といった条件で対象を減らします。ここを最初にやるのは、あとの処理が軽くなるからです。次に並べます。金額の大きい順にします。次に選びます。渡す相手に必要な列だけにします。売上日と店舗と商品名と金額があれば足りるでしょう。最後に整えます。上位10件に切り、インデックスを振り直します。
Python
import pandas as pd
df = pd.read_csv("sales.csv")
report = (
df[df["金額"] >= 10000]
.sort_values("金額", ascending=False)
[["売上日", "店舗", "商品名", "金額"]]
.head(10)
.reset_index(drop=True)
)丸かっこで囲むと、複数行に分けて書けます。1行がとても長くなるのを防げるので、処理を4つ以上つなぐときはこの形にしてください。
順番を入れ替えても結果が同じになる場面はありますが、意味が変わる場面もあります。head(10) を並べ替えの前に置くと、上位10件ではなく最初の10件になります。切るのは必ず並べ替えたあとです。
出来上がった表はそのまま返せないので、to_dict("records") で行ごとの辞書のリストに直します。実務ではここで to_csv("report.csv", index=False) としてファイルに保存し、相手に渡します。この演習では、抽出レポートを最後まで通します。
要件
- 金額が5000以上の行を絞る
- 金額の降順に並べ替える
- 売上日・店舗・商品名・金額の4列だけにする
- 上位3件に切り、reset_index(drop=True) でインデックスを振り直す
- {"count": 件数, "total": 合計, "records": 行ごとの辞書のリスト} を返す
入出力例
build_report("売上日,店舗,商品名,カテゴリ,数量,金額
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
") → {"count":3,"records":[{"商品名":"鋳物ホーロー鍋","売上日":"2026-02-03","店舗":"渋谷店","金額":16800},{"商品名":"白磁のマグカップ","売上日":"2026-02-04","店舗":"大宮店","金額":9000},{"商品名":"鉄のフライパン","売上日":"2026-01-06","店舗":"横浜店","金額":7800}],"total":33600}
build_report("売上日,店舗,商品名,カテゴリ,数量,金額
2026-01-05,渋谷店,白磁のマグカップ,食器,2,3600
2026-01-06,横浜店,鉄のフライパン,調理器具,1,7800
2026-01-07,大宮店,積み重ね収納ボックス,収納,3,4500
2026-01-08,渋谷店,木製カッティングボード,調理器具,1,4200
") → {"count":1,"records":[{"商品名":"鉄のフライパン","売上日":"2026-01-06","店舗":"横浜店","金額":7800}],"total":7800}ヒント
編集 ゆめさく編集部