Python × Excel

Pythonで列のフィールド値ごとにグループ集計する方法(groupby)

2020-10-16

本記事では、Python/Pandasのgroupby関数で列のフィールド値ごとにグループ集計する方法をご紹介します。

Pythonの実行環境

今回は、以下の実行環境でプログラムを実行しています。

・Python 3.7.6
・Jupyterlab 1.2.6
・Pandas:1.1.2

テストデータは、次のような予算管理表を使います。

ファイル名は「テストデータ.xlsx」で、シート名は「予算管理表」です。

■予算管理表

テストデータ

 

本記事で、利用するライブラリはPandasです。
そして、テストデータの予算管理表をdfとして読み込んでおきます。

import pandas as pd
df = pd.read_excel('テストデータ.xlsx', sheet_name = '予算管理表')

 

※本記事では、Pythonのコードの下のコメントアウトは、出力結果を示しています。

 

Pythonで列のフィールド値ごとにグループ集計する方法(groupby)

まず、「列のフィールド値別にグループ集計」とはどういうことでしょうか。

言葉で書くよりもExcelのイメージでみた方が分かりやすいと思います。

Excel_sumif1

 

「件名」列の各フィールド値の単位で、「合計」列〜「2023年度」列の数値を合計したものとなります。

結果が、上の図の赤枠の表の部分となります。

 

これをPythonで行うときは、groupby()を用います。引数に、キーとなる列を指定します。

df.groupby('件名').sum()

結果は次のようになります。

groupby結果
一見、よさそうに見えますが、「件名番号」列という本来不要なものまで合計されてしまっています。

これは、groupby()を使うと、数値型の列が集計されるためです。

これを防ぐには、「件名番号」列のデータ型(形式)を文字列に変更する必要があります。

 

Pythonで列のデータ型(形式)を変更する方法(グループ集計の準備)

テストデータとして読み込んだdfのデータ型を確認します。データ型は、dtypesで確認できます。

df.dtypes
#件名番号               int64
#費目1               object
#費目2               object
#件名                object
#合計                 int64
#2021年度             int64
#2022年度             int64
#2023年度             int64
#担当者コード            object
#実施完了年月    datetime64[ns]

 

確かに、「件名番号」列が数値型になっています。

これを変更するには、astype()を使って、次のように書きます。

df['件名番号'] = df.astype({'件名番号': 'str'})

 

引数には、辞書型で変更する列名と変更後のデータ方を指定します。

 

これで改めて、

df.groupby('件名').sum()

を行うと、結果は次の通りとなり、本来欲しい結果となりました。

groupby結果2

 

最後に、groupbyの留意点として、キーに指定した列のフィールド値の順番が指定できないということです。

上の例では、「メールシステムの利用料」→「メールシステムの改修」→・・・→「販売システムの構築」となっているのを自分の好きな並び順に指定できないということです。

(もし変更できる方法を知っている方はぜひ教えてください。)

 

 

 

以上、Pythonでgroupbyを使って、列のフィールド値別にグループ集計の方法を説明してきました。

最後まで読んでいただき、ありがとうございました。

よく読まれている記事

insta-auto-post 1

  インスタって自動で投稿できないのかな。いつもスマホで投稿するの大変だし・・ Pythonを使えば、インスタで自動で投稿できるよ!!特別に紹介するね ...

python-consult_1 2

  AI・機械学習、データサイエンティスト、、やっぱりこれからの時代Pythonは勉強すべきだよね!   その通り。Pythonは今後も伸び ...

【保存版】PythonでできるExcel操作のまとめ一覧 3

  Excelで作業するのって大変だな〜 なにか楽な方法ないかな〜   Excelの集計や単純作業は、Pythonで楽にできるよ!!この一覧 ...

python-works 4

ここでは、サイト管理者のいなサラがこれまでPythonで作ったものをご紹介します。 以下のリンクで、実際の作り方やソースコードを公開しているので、ぜひ参考にして ...

-Python × Excel

© 2023 inasala note