pandasでデータ加工を行っています。
以下のようなデータフレームを想定しています。
カテゴリ | 年 | 値 |
---|---|---|
A | 2000 | 10 |
A | 2000 | 30 |
B | 2000 | 15 |
A | 2001 | 50 |
B | 2001 | 25 |
B | 2001 | 20 |
A | 2002 | 10 |
B | 2002 | 20 |
A | 2003 | 10 |
B | 2003 | 10 |
このデータに対して、「カテゴリ」の値ごとに過去2年分の「値」の平均値を持った以下のようなデータフレームを作りたいと思っています。
|カテゴリ|年|値|過去2年平均
|:--|:--:|--:|
|A|2000|10|NA
|A|2000|30|NA
|B|2000|15|NA
|A|2001|50|NA
|B|2001|25|NA
|B|2001|20|NA
|A|2002|10|30
|B|2002|45|20
|A|2003|10|30
|B|2003|10|30
このようなデータフレームを作る際に、現在は以下のようにしています。
python
1df_agg = pd.DataFrame() 2for year in range(2002, 2004): 3 df_temp = df[df["年"].between(year-2, year-1)].groupby("カテゴリ")["値"].mean().rename("過去2年平均").reset_index() 4 df_temp["年"] = year 5 df_agg = pd.concat([df_agg, df_temp]) 6df = pd.merge(df, df_agg, on=["年", "カテゴリ"], how="left")
これで実現できているものの、何か回りくどいような気がしますし、処理にも結構時間がかかってしまっています。
もしもこれよりもより効率的で高速な方法があれば教えていただけないでしょうか。
よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。