実現したいこと
pythonのpandasでデータの集計をしています
indexに割り当てた営業IDごとに[売上順位]が1位だった確率を[過去TOP率]に代入したい
1列目はindexで営業IDになります
元データ
df =
date | 売上順位 | 売上 | 過去TOP率 | |
---|---|---|---|---|
00403 | 2021-06-12 | 1 | 100 | NaN |
05166 | 2021-06-12 | 3 | 60 | NaN |
02691 | 2021-06-12 | 2 | 80 | NaN |
00708 | 2021-06-12 | 4 | 20 | NaN |
00403 | 2021-06-15 | 1 | 85 | NaN |
00708 | 2021-06-15 | 2 | 60 | NaN |
02691 | 2021-06-15 | 4 | 40 | NaN |
05166 | 2021-06-15 | 3 | 50 | NaN |
05166 | 2021-07-10 | 1 | 70 | NaN |
02691 | 2021-07-10 | 3 | 40 | NaN |
00403 | 2021-07-10 | 2 | 65 | NaN |
00708 | 2021-09-13 | 2 | 50 | NaN |
00403 | 2021-09-13 | 1 | 70 | NaN |
02691 | 2021-09-13 | 3 | 45 | NaN |
00403 | 2021-12-28 | 4 | 60 | NaN |
05166 | 2021-12-28 | 2 | 75 | NaN |
00708 | 2021-12-28 | 1 | 100 | NaN |
02691 | 2021-12-28 | 3 | 80 | NaN |
00708 | 2021-02-08 | 3 | 40 | NaN |
05166 | 2021-02-08 | 2 | 60 | NaN |
00403 | 2021-02-08 | 1 | 65 | NaN |
想定する完成データ
df1 =
date | 売上順位 | 売上 | 過去TOP率 | |
---|---|---|---|---|
00403 | 2021-06-12 | 1 | 100 | 1 |
05166 | 2021-06-12 | 3 | 60 | 0 |
02691 | 2021-06-12 | 2 | 80 | 0 |
00708 | 2021-06-12 | 4 | 20 | 0 |
00403 | 2021-06-15 | 1 | 85 | 1 |
00708 | 2021-06-15 | 2 | 60 | 0 |
02691 | 2021-06-15 | 4 | 40 | 0 |
05166 | 2021-06-15 | 3 | 50 | 0 |
05166 | 2021-07-10 | 1 | 70 | 0 |
02691 | 2021-07-10 | 3 | 40 | 0 |
00403 | 2021-07-10 | 2 | 65 | 1 |
00708 | 2021-09-13 | 2 | 50 | 0 |
00403 | 2021-09-13 | 1 | 70 | 0.75 |
02691 | 2021-09-13 | 3 | 45 | 0 |
00403 | 2021-12-28 | 4 | 60 | 0.8 |
05166 | 2021-12-28 | 2 | 75 | 0.25 |
00708 | 2021-12-28 | 1 | 100 | 0 |
02691 | 2021-12-28 | 3 | 80 | 0 |
00708 | 2021-02-08 | 3 | 40 | 0 |
05166 | 2021-02-08 | 2 | 60 | 0 |
00403 | 2021-02-08 | 1 | 65 | 0 |
[過去TOP率]には最初の[date]から各売上当日までの[date]でなく、1つ前までの[date]を参照して計算したい
例えば0043の2021-12-28の[過去TOP率]には2021-02-08から2021-12-28までの全期間ではなく1つ前の2021-09-13まで、2021-07-10の[過去TOP率]には2021-02-08から1つ前の2021-06-15までの1位だった確率を[過去TOP率]に代入したい
indexに割り当てた営業IDごとに[売上順位]が1位だった確率を[過去TOP率]に代入したいのですが当方の技量不足により以下の文を書いたところで行き詰まりました
eigyou_id_list = ['00403','05166','02691','00708'] target_df = df.loc[eigyou_id_list] df.loc[df['売上順位'] >= 2, '過去TOP率'] = 0 df.loc[df['売上順位'] == 1, '過去TOP率'] = 1 df['過去TOP率'] = target_df[target_df['date'] < date].sort_values('date', ascending=False).groupby(level=0)[['過去TOP率']].mean()
初心者で試したことも少ないのですが、よろしくお願いします

回答2件
あなたの回答
tips
プレビュー