小梅の日記帳

覚書き、メモ、等々残していくつもりです。

1分値データから30分平均へデータを変換する方法

1分毎のデータを用意します。

import pandas as pd
import numpy as np

df = pd.DataFrame({'value': range(1,62,1)},
                  index=pd.date_range('2018-08-01 12:00', '2018-08-01 13:00', freq='T'))

データはこんな感じになります

          value
2018-08-01 12:00:00 1
2018-08-01 12:01:00 2
2018-08-01 12:02:00 3
2018-08-01 12:03:00 4
2018-08-01 12:04:00 5
2018-08-01 12:05:00 6
2018-08-01 12:06:00 7
2018-08-01 12:07:00 8
2018-08-01 12:08:00 9
2018-08-01 12:09:00 10
2018-08-01 12:10:00 11
2018-08-01 12:11:00 12
2018-08-01 12:12:00 13
2018-08-01 12:13:00 14
2018-08-01 12:14:00 15
2018-08-01 12:15:00 16
2018-08-01 12:16:00 17
2018-08-01 12:17:00 18
2018-08-01 12:18:00 19
2018-08-01 12:19:00 20
2018-08-01 12:20:00 21
2018-08-01 12:21:00 22
2018-08-01 12:22:00 23
2018-08-01 12:23:00 24
2018-08-01 12:24:00 25
2018-08-01 12:25:00 26
2018-08-01 12:26:00 27
2018-08-01 12:27:00 28
2018-08-01 12:28:00 29
2018-08-01 12:29:00 30
... ...
2018-08-01 12:31:00 32
2018-08-01 12:32:00 33
2018-08-01 12:33:00 34
2018-08-01 12:34:00 35
2018-08-01 12:35:00 36
2018-08-01 12:36:00 37
2018-08-01 12:37:00 38
2018-08-01 12:38:00 39
2018-08-01 12:39:00 40
2018-08-01 12:40:00 41
2018-08-01 12:41:00 42
2018-08-01 12:42:00 43
2018-08-01 12:43:00 44
2018-08-01 12:44:00 45
2018-08-01 12:45:00 46
2018-08-01 12:46:00 47
2018-08-01 12:47:00 48
2018-08-01 12:48:00 49
2018-08-01 12:49:00 50
2018-08-01 12:50:00 51
2018-08-01 12:51:00 52
2018-08-01 12:52:00 53
2018-08-01 12:53:00 54
2018-08-01 12:54:00 55
2018-08-01 12:55:00 56
2018-08-01 12:56:00 57
2018-08-01 12:57:00 58
2018-08-01 12:58:00 59
2018-08-01 12:59:00 60
2018-08-01 13:00:00 61

ここで30分毎の平均値へ変換したいとします。

df.resample(rule='30Min').mean()
                                 value
2018-08-01 12:00:00 15.5
2018-08-01 12:30:00 45.5
2018-08-01 13:00:00 75.5
2018-08-01 13:30:00 105.5
2018-08-01 14:00:00 121.0

30分毎の平均値の時系列データへ変換することができました。

念の為値の確認をしてみます。

a = np.arange(1,31)
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,
       18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30])
np.average(a)
15.5

値は合致しました。 pandas強い。

次は、欠測値が含まれる場合を考えてみようかな。