データサイエンス100本ノックで勉強(24)

データサイエンス100本ノックでSQLPythonを勉強していきます。

github.com

S-026: レシート明細テーブル(receipt)に対し、顧客ID(customer_id)ごとに最も新しい売上日(sales_ymd)と古い売上日を求め、両者が異なるデータを10件表示せよ。

SQLだと以下のようになります。

%%sql
select customer_id, max(sales_ymd), min(sales_ymd)
from receipt
group by customer_id
having max(sales_ymd) != min(sales_ymd)
limit 10;

f:id:JunpeiNakasone:20220214055558p:plain

Pythonだと以下のようになります。

df_tmp = df_receipt.groupby('customer_id'). \
        agg({'sales_ymd':['max','min']}).reset_index()
df_tmp.columns = ["_".join(pair) for pair in df_tmp.columns]
df_tmp.query('sales_ymd_max != sales_ymd_min').head(10)

f:id:JunpeiNakasone:20220214060006p:plain

だいぶPandasの気泡が難しくなってきました。
とりあえずデータフレームに対してfor文が使えることがわかりました。

biotech-lab.org