
実現したいこと
・pythonのpandasで、データ分析をしています。
・顧客の購買データ(1行は、1人の顧客の1回の購入)を顧客・月単位で集計した表を作りたく、データフレームオブジェクトに対して、groupbyメソッドを使ったのですが、例えば、顧客Aが7月の購入履歴が0回の場合、groupbyメソッドでは、顧客Aの7月の行が生成されません。
・上記に対して、顧客Aの7月の行も生成されるようにしたいのですが、良い方法はありますでしょうか。(集計値は0もしくはNanとする。)
前提
・pythonのpandasモジュールを使ってデータ分析をしています。
詳細
・例えば、以下のようなデータフレームになります。
顧客 購入日 購入月 購入金額
A 6/8 6月 2000円
A 6/10 6月 3000円
A 8/8 8月 4000円
A 9/10 9月 5000円
B--------(以下省略)-----------
B
C
・このデータフレーム(df_sample)に対して、
df_sample.groupby([”顧客”,"購入月"]).count()
で集計すると、顧客Aの7月の行は生成されませんが、顧客Aの7月の行を生成したいです。
・自分が思いつくのは、df_sampleの顧客列と購入月のユニーク値のリストを生成し、そのリストを二重でループさせて、顧客×購入月のユニークな組み合わせを順々に取得し、その組み合わせを新しいデータフレームに格納。その後、そのデータフレームに対して、df_sample.groupby([”顧客”,"購入月"]).count()を、left_joinで結合、という方法ですが、コードが冗長的かつ二重ループがあり時間がかかりそうです。
・何か、スマートなやり方はないでしょうか。
備考
・初学者のため、おかしなことを言っているかもしれませんが、前提や知識がおかしければ、そのあたりもご教授いただければ幸いです。

0 コメント