LoginSignup
2
4

More than 3 years have passed since last update.

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

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

Youtube

動画解説もしています。

問題

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

解答

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

出力

sales_ymd customer_id product_cd amount
36 20180911 CS018205000001 P071401012 2200
9843 20180414 CS018205000001 P060104007 600
21110 20170614 CS018205000001 P050206001 990
27673 20170614 CS018205000001 P060702015 108
27840 20190216 CS018205000001 P071005024 102
28757 20180414 CS018205000001 P071101002 278
39256 20190226 CS018205000001 P070902035 168
58121 20190924 CS018205000001 P060805001 495
68117 20190226 CS018205000001 P071401020 2200
72254 20180911 CS018205000001 P071401005 1100
88508 20190216 CS018205000001 P040101002 218
91525 20190924 CS018205000001 P091503001 280

解説

・PandasのDataFrame/Seriesにて、列を指定しつつ、指定した行のうち、条件に当てはまる行を確認する方法です。
・列情報を絞り、かつ、行を指定して、かつ、条件に当てはまる情報を確認したい時に使用します。
'<データ名>[['<列名A>','<列名B>','<列名C>']].guery('<列名A> == "<行情報A>" & <列名B> != <行情報B>')'で、指定した列(列名A,列名B,列名C)のうち、列名A が指定した 行情報A に該当する行で、かつ、列名B 指定した 行情報B に該当する行を表示します。

※以下のコードのように「!=」を「<>」にしてしまうと、エラーになります。「<>」は、過去に「!=」と同じ意味で使用されていましたが、現在は使われていません。

コード
df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']] \
.query('customer_id == "CS018205000001" & product_cd <> "P071401019"')

※比較演算子については、こちらの記事が参考になります

2
4
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
2
4