1
0

More than 3 years have passed since last update.

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

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

Youtube

動画解説もしています。

問題

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

解答

コード
df_receipt.groupby('customer_id').sales_ymd.min().reset_index().head(10)

出力

customer_id sales_ymd
0 CS001113000004 20190308
1 CS001114000005 20180503
2 CS001115000010 20171228
3 CS001205000004 20170914
4 CS001205000006 20180207
5 CS001211000025 20190322
6 CS001212000027 20170127
7 CS001212000031 20180906
8 CS001212000046 20170811
9 CS001212000070 20191018

解説

・PandasのDataFrame/Seriesにて、同じ値を持つデータをまとめて処理し、同じ値を持つデータの合計や平均などを確認したい時に使用します。
'groupby'は、同じ値や文字列を持つデータをまとめて、それぞれの同じ値や文字列に対して、共通の操作(合計や平均など)を行いたい時に使います。
'.sales_ymd.min()'は、'.sales_ymd'の最小値(=最も古い売上日)を表示させます。
'.reset_index()'は、'groupby'によってバラバラになったインデックス番号を0始まりの連番に振り直す操作を行いたい時に使います。

※以下のコードでも、同じ結果を出力します('.agg'を用いた場合)

コード
df_receipt.groupby('customer_id').agg({'sales_ymd':'min'}).reset_index().head(10)
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