時系列データの抽出、平均の算出法
閲覧していただきありがとうございます。
以下のデータには東京と大阪(都道府県)における、りんごとみかん(果物)の値段、そのデータが計測された年(年)の情報があります。
今回わからないことは、全ての行において、値段をその行より前の年、かつ、その行と同一条件(同一果物、同一都道府県)で抽出し、その集団の平均値を別のカラム(以下にあるゴールにおいては結果カラム)へ出力する方法です。
例えば最初の行は 果物:りんご、都道府県:東京、年:2020 なので、果物がりんご、かつ都道府県が東京、かつ2020年より前(2020>年)の集団を抽出してきて、その集団の平均値を求めて出力するということになります。
これを全ての行に適用したいです。
python
1df = pd.DataFrame([['りんご', '東京', 157, 2020], 2 ['りんご', '東京', 172, 2019], 3 ['りんご', '東京', 146, 2018], 4 ['りんご', '東京', 152, 2017], 5 ['りんご', '大阪', 135, 2020], 6 ['りんご', '大阪', 165, 2019], 7 ['りんご', '大阪', 148, 2018], 8 ['りんご', '大阪', 176, 2017], 9 ['みかん', '東京', 82, 2020], 10 ['みかん', '東京', 65, 2019], 11 ['みかん', '東京', 53, 2018], 12 ['みかん', '東京', 73, 2017], 13 ['みかん', '大阪', 76, 2020], 14 ['みかん', '大阪', 58, 2019], 15 ['みかん', '大阪', 63, 2018], 16 ['みかん', '大阪', 52, 2017]], 17 columns=['果物', '都道府県', '値段', '年']) 18
ゴール
python
1#ゴール 2#2017年は前の年のデータがないためNaN 3 果物 都道府県 値段 年 結果 40 りんご 東京 157 2020 156.666667 51 りんご 東京 172 2019 149.000000 62 りんご 東京 146 2018 152.000000 73 りんご 東京 152 2017 NaN 84 りんご 大阪 135 2020 163.000000 95 りんご 大阪 165 2019 162.000000 106 りんご 大阪 148 2018 176.000000 117 りんご 大阪 176 2017 NaN 128 みかん 東京 82 2020 63.666667 139 みかん 東京 65 2019 63.000000 1410 みかん 東京 53 2018 73.000000 1511 みかん 東京 73 2017 NaN 1612 みかん 大阪 76 2020 57.666667 1713 みかん 大阪 58 2019 57.500000 1814 みかん 大阪 63 2018 52.000000 1915 みかん 大阪 52 2017 NaN
試したこと
for文で1行ずつ取り出しての実行はできたのですが、実際のデータは行数が多いため、このコードだと処理に時間がかかり過ぎてしまいます。
python
1for i in range(len(df)): 2 x = df[(df['果物'] == df.at[i, '果物']) & (df['都道府県'] == df.at[i, '都道府県']) & (df['年'] < df.at[i, '年'])]['値段'] 3 df.at[i, '結果'] = x.mean()
そこで**「処理をより高速に終わらせる方法」**を模索しています。
どうかご回答よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/01 05:00