やりたいこと
pandasのデータフレームで以下のようなデータフレーム(df)があります。
id | date | sales |
---|---|---|
A1 | 2020/01/01 | 2000.0 |
A1 | 2020/01/15 | 1000.0 |
A1 | 2020/02/10 | 3000.0 |
A2 | 2020/01/01 | 1000.0 |
A2 | 2020/01/10 | 2000.0 |
A2 | 2020/01/20 | 3000.0 |
A2 | 2020/02/20 | NaN |
A2 | 2020/03/01 | 1000.0 |
id、monthでグループ化し、salesの累積中央値を算出したいです。
(以下のイメージ)
id | month | median_sales |
---|---|---|
A1 | Jan | 1500.0 |
A1 | Feb | 2000.0 |
A2 | Jan | 2000.0 |
A2 | Feb | 2000.0 |
A2 | Mar | 1500.0 |
A1のFebのmedian salesは、A1の1月、2月のsalesの中での中央値を取得したいです。
A2のFebのmedian salesは、A2の1月、2月のsalesの中での中央値を取得したいです。
A2のMarのmedian salesは、A2の1月、2月、3月のsalesの中での中央値を取得したいです。
試したこと
以下のプログラムを考えましたが、期待した結果にはなりませんでした。
python
1df['month'] = pd.DatetimeIndex(df['date']).month 2df['median_sales'] = df.groupby(['id', 'month'])['sales'].expanding().median().reset_index()
cumsum, cumcountみたいな関数が見つからず、実装方法が思いつきません。
皆様、お忙しいとは思いますが、何卒宜しくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。