これは、データ生成を容易にするために考案された例ですが、一般に、これは幅広い対象者に当てはまる問題であるはずです。
私は次のような時系列の測定値を持っています:
In [1]: import pandas as pd
In [2]: index = pd.date_range(start="18:10",periods=20,freq='min')
In [3]: df = pd.DataFrame(randn(20,3),columns=list('abc'),index=index)
In [4]: df.head()
Out[4]:
a b c
2013-02-27 18:10:00 -1.344753 0.438351 1.561849
2013-02-27 18:11:00 1.715643 1.601984 -0.027408
2013-02-27 18:12:00 -0.142264 -0.049462 0.482493
2013-02-27 18:13:00 0.132617 0.737902 -0.347620
2013-02-27 18:14:00 1.277257 0.083401 0.649422
「実際の」測定の間に、校正測定が行われていますが、測定よりもはるかに低い頻度で、たとえば次のようになります。
In [5]: calindex = pd.date_range("18:12:30",periods=4,freq='5min')
In [6]: caldata = pd.Series([10,20,30,40],index = calindex)
In [7]: caldata
Out[7]:
2013-02-27 18:12:30 10
2013-02-27 18:17:30 20
2013-02-27 18:22:30 30
2013-02-27 18:27:30 40
Freq: 5T
現在の一般的な考え方は、これらのキャリブレーションデータを測定に適用することです。このために、「最も近い時間」のアプローチでキャリブレーションデータを配布/ブロードキャストしたいので、たとえば、「オフセット」と呼ばれる別の列を生成します。この列には、測定値の各行にそのキャリブレーション値があります。各測定値の時間に最も近い時間で決定されます。
したがって、私は次のような最終結果を求めています。
In [14]: df
Out[14]:
a b c offsets
2013-02-27 18:10:00 -1.344753 0.438351 1.561849 10
2013-02-27 18:11:00 1.715643 1.601984 -0.027408 10
2013-02-27 18:12:00 -0.142264 -0.049462 0.482493 10
2013-02-27 18:13:00 0.132617 0.737902 -0.347620 10
2013-02-27 18:14:00 1.277257 0.083401 0.649422 10
2013-02-27 18:15:00 0.048120 0.421220 0.149372 20
2013-02-27 18:16:00 0.812317 -1.517389 2.035487 20
2013-02-27 18:17:00 -0.058959 -0.034876 -1.535118 20
2013-02-27 18:18:00 -0.666227 0.040208 -1.042464 20
2013-02-27 18:19:00 -0.077031 -0.158351 -0.441992 20
2013-02-27 18:20:00 0.103083 -0.129341 0.294073 30
2013-02-27 18:21:00 0.900802 0.443271 -0.946229 30
2013-02-27 18:22:00 0.744631 -0.058666 -0.386226 30
2013-02-27 18:23:00 -0.064313 0.500321 -0.536237 30
2013-02-27 18:24:00 -0.392653 0.789827 0.000109 30
2013-02-27 18:25:00 1.926765 0.252259 -0.051475 40
2013-02-27 18:26:00 -0.035577 0.559222 -0.290751 40
2013-02-27 18:27:00 1.726165 0.626515 -0.868177 40
2013-02-27 18:28:00 1.269409 1.520980 -0.181637 40
2013-02-27 18:29:00 -1.151166 -0.300196 0.420747 40
.map、.applyなどを介した他の列への値の適用。よく理解していると思いますが、値の分散に必要な時間またはオフセットのトリックは、私には何の手がかりもありません。で開始する。
pandas.DateOffsetsで攻撃する必要がありますか?パンダ内の時間差を最小化するための機械はどこかにありますか?
私は正しい方向に少しずつ進んでいただければ幸いです。完全である必要はなく、私が進む必要のある方向だけです。