LoginSignup
0
0

More than 3 years have passed since last update.

【Python】データサイエンス100本ノック(構造化データ加工編) 006 解説

Last updated at Posted at 2020-07-18
  • データサイエンス100本ノックをやりきる会を作りました🎉
  • こちらのSlack招待URLからご参加ください!!
  • ぜひ一緒に励まし合いながら、データサイエンス100本ノックをやり切りたいと思っています!

Youtube

動画解説もしています。

問題

P-006: レシート明細データフレーム「df_receipt」から売上日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上数量(quantity)、売上金額(amount)の順に列を指定し、以下の条件を満たすデータを抽出せよ。
- 顧客ID(customer_id)が"CS018205000001"
- 売上金額(amount)が1,000以上または売上数量(quantity)が5以上

解答

コード
df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'quantity', 'amount']] \
.query('customer_id == "CS018205000001" & (amount >= 1000 or quantity >=5)')

出力

sales_ymd customer_id product_cd quantity amount
36 20180911 CS018205000001 P071401012 1 2200
9843 20180414 CS018205000001 P060104007 6 600
21110 20170614 CS018205000001 P050206001 5 990
68117 20190226 CS018205000001 P071401020 1 2200
72254 20180911 CS018205000001 P071401005 1 1100

解説

・PandasのDataFrame/Seriesにて、列を指定しつつ、指定した行のうち、複数の条件に当てはまる行を確認する方法です。
・列情報を絞り、かつ、行を指定して、かつ、複数の条件に当てはまる情報を確認したい時に使用します。
or条件は、「|」パイプライン(vertical bar)を用いて表現します。
'<データ名>[['<列名A>','<列名B>','<列名C>']].guery('<列名A> == "<行情報A>" & <列名B> >= 1000 | 列名C >= 5')'で、指定した列(列名A,列名B,列名C)のうち、「列名A が指定した 行情報A に該当する行で、かつ、列名B が1000以上」、あるいは、「列名A が指定した 行情報A に該当する行で、かつ、列名C が5以上」の行を表示します。

※ちなみに、以下のコードのように「|」を「or」にしても、同じ結果になります。

コード
df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'quantity', 'amount']] \
.query('customer_id == "CS018205000001" & (amount >= 1000 or quantity >=5)')
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0