![見出し画像](https://assets.st-note.com/production/uploads/images/86561906/rectangle_large_type_2_8a72dfac2679eebaba729539121cca9f.png?width=800)
[Python] pandas groupbyを使って、日付毎に最も売れた商品を取得する
はじめに
pandasで、groupbyを使用し、グループ内の最大値を持つ行を取得する実装について、まとめます。
使用するサンプルデータ
売上一覧のサンプルデータを使用しました。
![](https://assets.st-note.com/img/1662772974523-G0mjd0HjWO.png?width=800)
カラム構成は、下記です。
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()
![](https://assets.st-note.com/img/1662773124515-9ar8Na4fGe.png)
読み込んだ各カラムのデータ型を、DataFrameオブジェクトのdtypesメンバーで確認します。
df.dtypes
![](https://assets.st-note.com/img/1662773254918-08tluYeS3a.png?width=800)
「date」カラムがobject型となっているため、pandasモジュールのto_datetimeメソッドを日付型に変換します。
df['date'] = pd.to_datetime(df['date'])
dtypesメンバーで、各カラムのデータ型を確認します。
「date」カラムが日付型になっていることが確認できました。
![](https://assets.st-note.com/img/1662773752058-1l6iS0Kdev.png?width=800)
データのグループ化
DataFrameオブジェクトをグループ化するには、groupbyメソッドを使用します。
今回は、「date」でグループ化します。
df_date_group = df.groupby(['date'])
続いて、各日付毎に最も売れた商品をmaxメソッドで取得します。
df_date_group['quantity'].max()
![](https://assets.st-note.com/img/1662775054935-Sw09VbKWEJ.png?width=800)
この方法だと、各日付毎に最も売れた商品の行が確認できません。
そのため、groupbyオブジェクトのidxmaxメソッドを使用して、最大値の行名を取得します。
続いて、取得した行名より、DataFrameオブジェクトのlocメソッドを使用し、対象となる行を取得します。
df.loc[df_date_group['quantity'].idxmax(), :]
![](https://assets.st-note.com/img/1662775123651-3wexwfhR5x.png?width=800)
日付毎に最も売れた行を取得することができました!
まとめ
今回は、groupbyを使用し、グループ内の最大値を持つ行を取得する実装を、売上一覧をサンプルとして、日付毎に最も売れた行を取得する実装について、まとめました。
参考文献、サイト
この記事が気に入ったらサポートをしてみませんか?