python3系、pandasでデータ処理をしています。
- dfのindexはdatetime64で1時間ごとのデータがある。
- 1日毎に集計値を計算したい。
- その計算には、その日のデータだけではなく、前後のデータが必要。
- データのある期間はもちろん有限ですが、途中の欠損値はありません。
集計方法の例は下記です。
例1) k=0,1,...,23で、k時とk+1時の差を2乗して合計を集計値とする。(つまり、翌日の0時を含む25時間分のデータが必要)
例2) その日を含む前3日間の平均を、集計値とする。(resampleと移動平均を同時にやる感じ)
などです。
データは例えばですが、下記のような形式です。
python
1import pandas as pd 2import numpy as np 3 4periods = 73 5 6np.random.seed(42) 7df = pd.DataFrame( 8 np.random.rand(periods), 9 columns=['data'], 10 index=pd.date_range('2020-01-01 00:00', periods=periods, freq='H'), 11 ) 12 13
data | |
---|---|
2020-01-01 00:00 | 0.374540 |
2020-01-01 01:00 | 0.950714 |
2020-01-01 02:00 | 0.731994 |
2020-01-01 03:00 | 0.598658 |
2020-01-01 04:00 | 0.156019 |
... | ... |
2020-01-03 20:00 | 0.074551 |
2020-01-03 21:00 | 0.986887 |
2020-01-03 22:00 | 0.772245 |
2020-01-03 23:00 | 0.198716 |
2020-01-04 00:00 | 0.005522 |
やりたいことはDataFrame.resample()でできることに近いのですが、範囲外のデータを使うという意味でやり方がわかりません。rollingだと重すぎるし、日毎にリサンプルしたいので、ちょっと違う気がしています。
それなりに大きなデータを多数処理しなくてはならないため、処理時間も気になっており、無理ならデータ列をndarrayにしてから計算しようかとかも考えています。
どなたかいい案があれば、ご教示いただけますよう、よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/02 00:21
2020/03/02 01:36