Pythonにて各トランザクションごとに過去〇日以内の商品種類数を抽出したい。

実現したいこと

Python(できればpandasかpolars)にて各トランザクションごとに過去〇分以内の商品種類数を抽出したい。

前提

Pythonで、各トランザクションの会員NO(kaiinNo)ごとにトランザクション発生日(use_date)から3日以内の
購入した商品の種類の数を抽出したいです。
RollingGroupbyオブジェクトがnuniqueというメソッドを持っていないために発生しているところまでは理解しているのですが、
どうにかして商品の種類数nuniqueを取得したいと考えています。

■元データ
TransacionID kaiinNo productID
use_date
2023-01-01 1 123 A
2023-01-02 2 123 B
2023-01-03 3 123 C
2023-01-04 4 123 C
2023-01-05 5 123 D
2023-01-06 6 124 A
2023-01-07 7 124 B
2023-01-08 8 124 B
2023-01-09 9 124 B
2023-01-10 10 124 A

■やりたいこと(3day_unique)
TransacionID kaiinNo productID 3day_nunique
use_date
2023-01-01 1 123 A 1
2023-01-02 2 123 B 2
2023-01-03 3 123 C 3
2023-01-04 4 123 C 2
2023-01-05 5 123 D 2
2023-01-06 6 124 A 1
2023-01-07 7 124 B 2
2023-01-08 8 124 B 2
2023-01-09 9 124 B 1
2023-01-10 10 124 A 2

発生している問題・エラーメッセージ

該当のソースコード

Python

1table = pd.DataFrame(data={"TransacionID":[1,2,3,4,5,6,7,8,9,10], 2 "kaiinNo":[123,123,123,123,123,124,124,124,124,124],3 "productID":["A", "B", "C", "C", "D", "A", "B", "B", "B", "A"],4 "use_date":["2023/1/1", "2023/1/2","2023/1/3","2023/1/4","2023/1/5","2023/1/6", "2023/1/7","2023/1/8","2023/1/9","2023/1/10"]},5 )6table["use_date"] = pd.to_datetime(table["use_date"])7table = table.set_index("use_date").sort_index()8table

試したこと

下記を実行し、AttributeErrorが発生することを確認しています。
table.groupby("kaiinNo")["productID"].rolling("3d").nunique()
AttributeError: 'RollingGroupby' object has no attribute 'nunique'

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

コメントを投稿

0 コメント