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

前回に引き続きSQLPythonでデータサイエンス100本ノック進めていきます。

github.com

S-007: レシート明細のテーブル(receipt)から売上日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、以下の条件を満たすデータを抽出せよ。
顧客ID(customer_id)が"CS018205000001" 売上金額(amount)が1,000以上2,000以下

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

%%sql
select sales_ymd, customer_id, product_cd, amount from receipt
where customer_id = 'CS018205000001'
and amount between 1000 and 2000

f:id:JunpeiNakasone:20220127061955p:plain

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

df_receipt[['sales_ymd','customer_id','product_cd','amount']]\
    .query('customer_id == "CS018205000001" & 1000 <= amount <= 2000')

f:id:JunpeiNakasone:20220127062303p:plain

SQLのbetweenはquery関数内で「最小値 <= カラム名 <=最大値」という感じで書けるようです。

S-008: レシート明細テーブル(receipt)から売上日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、以下の条件を満たすデータを抽出せよ。
顧客ID(customer_id)が"CS018205000001" 商品コード(product_cd)が"P071401019"以外

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

%%sql
select sales_ymd, customer_id, product_cd, amount from receipt
where customer_id = 'CS018205000001'
and product_cd != 'P071401019'

f:id:JunpeiNakasone:20220127062746p:plain

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

df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']] \
    .query('customer_id == "CS018205000001" & product_cd != "P071401019"')

f:id:JunpeiNakasone:20220127062922p:plain