今回は、複数の時系列データでそれぞれが別のタイムゾーンを持つ場合、それらのデータを演算した結果がどうなるのかを見ていこう。
まず、以下のような10日間の日付範囲があるとする。
import pandas as pd
import numpy as np
date_rng = pd.date_range('10/17/2019 21:00', periods=10, freq='B')
# DatetimeIndex(['2019-10-17 21:00:00', '2019-10-18 21:00:00',
# '2019-10-21 21:00:00', '2019-10-22 21:00:00',
# '2019-10-23 21:00:00', '2019-10-24 21:00:00',
# '2019-10-25 21:00:00', '2019-10-28 21:00:00',
# '2019-10-29 21:00:00', '2019-10-30 21:00:00'],
# dtype='datetime64[ns]', freq='B')
ts = pd.Series(np.random.randn(len(date_rng)), index=date_rng)
# 2019-10-17 21:00:00 -0.225737
# 2019-10-18 21:00:00 -0.285423
# 2019-10-21 21:00:00 -1.360346
# 2019-10-22 21:00:00 1.929381
# 2019-10-23 21:00:00 -0.237410
# 2019-10-24 21:00:00 -0.600526
# 2019-10-25 21:00:00 -1.399074
# 2019-10-28 21:00:00 -2.491753
# 2019-10-29 21:00:00 0.588928
# 2019-10-30 21:00:00 -0.564150
# Freq: B, dtype: float64
これをスライシングで二つの時系列データに分割し、それぞれ別のタイムゾーンを設定する。
ts1 = ts[:7].tz_localize('Asia/Tokyo')
# 2019-10-17 21:00:00+09:00 -0.225737
# 2019-10-18 21:00:00+09:00 -0.285423
# 2019-10-21 21:00:00+09:00 -1.360346
# 2019-10-22 21:00:00+09:00 1.929381
# 2019-10-23 21:00:00+09:00 -0.237410
# 2019-10-24 21:00:00+09:00 -0.600526
# 2019-10-25 21:00:00+09:00 -1.399074
# Freq: B, dtype: float64
ts2 = ts1[2:].tz_convert('Europe/London')
# 2019-10-21 13:00:00+01:00 -1.360346
# 2019-10-22 13:00:00+01:00 1.929381
# 2019-10-23 13:00:00+01:00 -0.237410
# 2019-10-24 13:00:00+01:00 -0.600526
# 2019-10-25 13:00:00+01:00 -1.399074
# Freq: B, dtype: float64
この二つの時系列データを演算した場合、結果として得られる時系列データのタイムゾーンはUTCに変換される。
result = ts1 + ts2
result.index
# DatetimeIndex(['2019-10-17 12:00:00+00:00', '2019-10-18 12:00:00+00:00',
# '2019-10-21 12:00:00+00:00', '2019-10-22 12:00:00+00:00',
# '2019-10-23 12:00:00+00:00', '2019-10-24 12:00:00+00:00',
# '2019-10-25 12:00:00+00:00'],
# dtype='datetime64[ns, UTC]', freq='B')