LEVEL 7 ・ Excel / Lesson 16

部署別に集計して、Excelに書き出す

groupby で部署別・担当別に集計し、結果を新しいExcelファイルに保存します。

目安 20分 ・ インストール不要

このレッスンが終わったら

「groupby で、グループに分けて集計できる。結果は to_excel で保存できる」と言える。

STEP 1

できることを見る

Excelで「部署別の合計」を出すには、ピボットテーブルや SUMIF を使いますね。Pythonでは、groupby(グループに分ける)という道具を使います。

import pandas as pd

df = pd.read_excel("sales.xlsx")
print(df.groupby("部署")["金額"].sum())
STEP 2

動かしてみる

部署別の売上合計pandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます

部署ごとの合計が、表示されました。営業が478000、企画が251000、総務が83000です。

STEP 3

1行ずつ読む

1行ずつ日本語にしてみる
df.groupby("部署")表を、「部署」ごとのグループに分ける
["金額"]その中の、「金額」の列に注目する
.sum()グループごとに、合計を出す

日本語にすると

部署ごとにグループ分けして、それぞれの金額の合計を出してください。

「.sum()」を、「.mean()(平均)」や「.count()(件数)」に変えれば、別の集計になります。Excelのピボットテーブルで、「合計」を「平均」に変えるのと同じです。

STEP 4

1か所だけ変える

① 担当者別にする。 "部署" を "担当" に変えるだけです。

担当者別の合計pandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます

② 合計と件数を、同時に出す。 agg に、集計の種類をリストで渡します。

合計と件数を同時にpandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます

③ 結果をExcelに書き出す。 集計の結果を、新しいExcelファイルとして保存します。reset_index() は、「部署」を普通の列に戻す、おまじないです。

集計結果をExcelに保存pandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます

to_excel("ファイル名", index=False) で、表をExcelファイルに書き出せます。index=False は、行番号(0, 1, 2…)を書かない、という指定です。最後の1行で、書き出したファイルを読み戻して、確かめています。

④ クロス集計(ピボットテーブル)。 「部署」と「商品」の、組み合わせごとの合計を出します。

部署×商品のクロス集計pandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます

Excelのピボットテーブルと、同じ結果です。index が行、columns が列、values が集計する値、aggfunc が集計の種類、fill_value=0 が、データがない所を0にする指定です。

STEP 5

自分で書く

お題① 部署別の合計を求めて、「営業」部の合計だけを表示してください。(478000)

お題①:営業部だけを取り出すpandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます
ヒントを見る

total は、部署名で取り出せます。print(total["営業"]) と書きます。

答えの例を見る
import pandas as pd

df = pd.read_excel("sales.xlsx")
total = df.groupby("部署")["金額"].sum()
print(total["営業"])

お題② 商品別の合計を、product.xlsx というファイルに書き出し、読み戻したときの「行数と列数」を表示してください。(3種類の商品なので、(3, 2) になります)

お題②:商品別の合計を保存pandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます
ヒントを見る

df.groupby("商品")["金額"].sum().reset_index() の結果を、to_excel("product.xlsx", index=False) で保存します。最後に pd.read_excel("product.xlsx").shape を表示します。

答えの例を見る
import pandas as pd

df = pd.read_excel("sales.xlsx")
result = df.groupby("商品")["金額"].sum().reset_index()
result.to_excel("product.xlsx", index=False)
print(pd.read_excel("product.xlsx").shape)
STEP 6

仕事ならどう使う?