【Python】100本ノックやってます。p‐70~p-74
P-070: レシート明細データ(df_receipt)の売上日(sales_ymd)に対し、顧客データ(df_customer)の会員申込日(application_date)からの経過日数を計算し、顧客ID(customer_id)、売上日、会員申込日とともに10件表示せよ(sales_ymdは数値、application_dateは文字列でデータを保持している点に注意)。
型を調べると
sales_ymd int64 customer_id object application_date int64 dtype: object
どちらも数値じゃん。
そして20181103みたいな形は、一旦文字列にしてからdate型にしないといけないらしい。
astypeで2列ともdate一気にしたかったのにエラー出ちゃってできないので、とりあえず1行ずつ変換した。
とりあえず答えは出たのでいいかしら、、、
P-071: レシート明細データ(df_receipt)の売上日(sales_ymd)に対し、顧客データ(df_customer)の会員申込日(application_date)からの経過月数を計算し、顧客ID(customer_id)、売上日、会員申込日とともに10件表示せよ(sales_ymdは数値、application_dateは文字列でデータを保持している点に注意)。1ヶ月未満は切り捨てること。
算数的に難しかった・・・(馬鹿)
「1か月未満は切り捨て」ってどっち方面???=-1どっちにも必要???
で躓きまくってました・・・
紙に線書いてるのにワカラナイのwww馬鹿すぎるwww
P-072: レシート明細データ(df_receipt)の売上日(df_customer)に対し、顧客データ(df_customer)の会員申込日(application_date)からの経過年数を計算し、顧客ID(customer_id)、売上日、会員申込日とともに10件表示せよ(sales_ymdは数値、application_dateは文字列でデータを保持している点に注意)。1年未満は切り捨てること。
daysを365日で割ろうと思ったけど、型が違うからかな、できなかった。
なので、P-071で出したmonthsを12で割ってみた。
P-073: レシート明細データ(df_receipt)の売上日(sales_ymd)に対し、顧客データ(df_customer)の会員申込日(application_date)からのエポック秒による経過時間を計算し、顧客ID(customer_id)、売上日、会員申込日とともに10件表示せよ(なお、sales_ymdは数値、application_dateは文字列でデータを保持している点に注意)。なお、時間情報は保有していないため各日付は0時0分0秒を表すものとする。
dt.apply(lambda x: int(x.timestamp()))
を使って引き算。
解答は違ったのでちゃんと理解しておく。
P-074: レシート明細データ(df_receipt)の売上日(sales_ymd)に対し、当該週の月曜日からの経過日数を計算し、売上日、直前の月曜日付とともに10件表示せよ(sales_ymdは数値でデータを保持している点に注意)。
●日前(変数)を引く方法に四苦八苦。
-pd.to_timedelta(df_sales["sales_weekday"],unit='d')
でいけた!