見出し画像

[Python] pandas groupbyを使って、日付毎に最も売れた商品を取得する

はじめに

pandasで、groupbyを使用し、グループ内の最大値を持つ行を取得する実装について、まとめます。

使用するサンプルデータ

売上一覧のサンプルデータを使用しました。

売上一覧サンプルデータ

カラム構成は、下記です。

  • A列…date(日付)

  • B列…id(商品ID)

  • C列…category(商品カテゴリー)

  • D列…name(商品名)

  • E列…price(価格)

  • F列…quantity(個数)

なお、このデータは、下記のサイトを使用して作成しました。

使用するライブラリ

pandas

データ分析をサポートするライブラリです。

動作環境

  • windows11

  • Jupyter Notebook 6.4.5(Python 3.9.7)

実装

前準備

CSVファイルを読み込み、DataFrameオブジェクトを生成します。

import pandas as pd

file_path = r'pandas_sample_product.csv'
df = pd.read_csv(file_path, encoding='cp932')

DataFrameオブジェクトのheadメソッドで、先頭から5行データを表示して確認します。

df.head()
headメソッドで、先頭5行を確認


読み込んだ各カラムのデータ型を、DataFrameオブジェクトのdtypesメンバーで確認します。

df.dtypes
dtypesメンバーでデータ型を確認

「date」カラムがobject型となっているため、pandasモジュールのto_datetimeメソッドを日付型に変換します。

df['date'] = pd.to_datetime(df['date'])

dtypesメンバーで、各カラムのデータ型を確認します。
「date」カラムが日付型になっていることが確認できました。

「date」カラムが日付型

データのグループ化

DataFrameオブジェクトをグループ化するには、groupbyメソッドを使用します。

今回は、「date」でグループ化します。

df_date_group = df.groupby(['date'])

続いて、各日付毎に最も売れた商品をmaxメソッドで取得します。

df_date_group['quantity'].max()
maxメソッドで、各日付毎に最も売れた商品個数を取得

この方法だと、各日付毎に最も売れた商品の行が確認できません。

そのため、groupbyオブジェクトのidxmaxメソッドを使用して、最大値の行名を取得します。
続いて、取得した行名より、DataFrameオブジェクトのlocメソッドを使用し、対象となる行を取得します。

df.loc[df_date_group['quantity'].idxmax(), :]

日付毎に最も売れた行を取得することができました!

まとめ

今回は、groupbyを使用し、グループ内の最大値を持つ行を取得する実装を、売上一覧をサンプルとして、日付毎に最も売れた行を取得する実装について、まとめました。

参考文献、サイト


いいなと思ったら応援しよう!