pandasで扱う時系列データ(シリーズやデータフレームのインデックス)は、必ずしも一意なデータになっているとは限らない。
場合によっては一つのタイムスタンプに対して、複数のデータを持たせることもあるだろう。
そのような重複した時系列データを扱う例を今回は紹介していく。
まず、次のようなデータがあるとしよう。
import pandas as pd
import numpy as np
dates = pd.DatetimeIndex([
'10/1/2019', '10/2/2019', '10/2/2019',
'10/2/2019', '10/3/2019'
])
ts = pd.Series(np.arange(5), index=dates)
# 2019-10-01 0
# 2019-10-02 1
# 2019-10-02 2
# 2019-10-02 3
# 2019-10-03 4
# dtype: int64
時系列が一意かどうかを確認する
インデックスが一意(ユニーク)でないことは、is_unique属性を見ると確認できる。
ts.index.is_unique
# False
重複した時系列を持つデータを参照する
重複した時系列を持つデータを参照する場合、タイムスタンプが重複しているかどうかで、得られるデータの形式は変わる。
下記のとおり、重複していない場合はスカラー値が戻され、重複している場合はデータの集合が戻される。
ts['10/3/2019'] # 重複していない
# 4
ts['10/2/2019'] # 重複している
# 2019-10-02 1
# 2019-10-02 2
# 2019-10-02 3
# dtype: int64
重複した時系列を持つデータを集約する
このようなデータを集約する場合は、groupby関数を使用し、level=0を指定すると良い。
grouped = ts.groupby(level=0)
grouped.sum()
# 2019-10-01 0
# 2019-10-02 6
# 2019-10-03 4
# dtype: int64
grouped.mean()
# 2019-10-01 0
# 2019-10-02 2
# 2019-10-03 4
# dtype: int64