LoginSignup
1
0

More than 3 years have passed since last update.

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

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

Youtube

動画解説もしています。

問題

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

解答

コード
df_sales_ymd = df_receipt.groupby('customer_id').agg({'sales_ymd':['max','min']}).reset_index()

df_sales_ymd.columns = ['customer_id','sales_ymd_max','sales_ymd_min']

df_sales_ymd.query('sales_ymd_max != sales_ymd_min').head(10)

出力

customer_id sales_ymd_max sales_ymd_min
1 CS001114000005 20190731 20180503
2 CS001115000010 20190405 20171228
3 CS001205000004 20190625 20170914
4 CS001205000006 20190224 20180207
13 CS001214000009 20190902 20170306
14 CS001214000017 20191006 20180828
16 CS001214000048 20190929 20171109
17 CS001214000052 20190617 20180208
20 CS001215000005 20181021 20170206
21 CS001215000040 20171022 20170214

解説

・PandasのDataFrame/Seriesにて、同じ値を持つデータをまとめて処理し、同じ値を持つデータの合計や平均などを確認したい時に使用します。
'groupby'は、同じ値や文字列を持つデータをまとめて、それぞれの同じ値や文字列に対して、共通の操作(合計や平均など)を行いたい時に使います。
'.agg({'sales_ymd':['max','min']})'は、'.sales_ymd'の最大値(=最も新しい売上日)と最小値(=最も古い売上日)を表示させます。
'.reset_index()'は、'groupby'によってバラバラになったインデックス番号を0始まりの連番に振り直す操作を行いたい時に使います。
・2行目、3行目は、既出のコードになりますが、'.columns'で列名を指定し、'.query'で条件を指定しています**

※2行目は、以下のコードでも、同じ結果を出力します
 ただし、'customer_id'が'customer_id_'になってしまいます

コード
df_sales_ymd.columns = ["_".join(pair) for pair in df_sales_ymd.columns]
1
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
1
0