データサイエンス100本ノックでSQLとPythonを勉強していきます。
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;
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)
だいぶPandasの気泡が難しくなってきました。
とりあえずデータフレームに対してfor文が使えることがわかりました。